рдЖрдЗрдП рдПрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ рд╕рд┐рдЯреМрдПрд╢рди рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ (рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдбреБрдмрдХреА рд▓рдЧрд╛рддреЗ рд╣реИрдВ)ред рдЖрдкрдХреЛ "рдЧрд╢" рд╕реНрд╡рдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реМрдВрдкреА рдЧрдИ рд╣реИред рдЖрдкрдХреЛ "рдореИрдиреБрдЕрд▓" рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ (рдЙрдирдореЗрдВ рд╕реЗ рд╣рдЬрд╛рд░реЛрдВ!) рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рд╢рд╛рд▓ рдкрд░реАрдХреНрд╖рдг рдпреЛрдЬрдирд╛ рджреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЛ рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ, рдФрд░ рд╡рд╣реАрдВред рдФрд░ рдпрд╣ рднреА, рдЬрд▓реНрджреА рдФрд░ stably рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПредрдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдмрд╣реБрдд рджреЗрд░ рд╣реЛ рдЪреБрдХреА рд╣реИ , рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЯреАрдбреАрдбреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рд╕реЛрдЪреЗрдВ , рддреЛ рдЙрддреНрдкрд╛рдж рдХреЛрдб рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдЖрдкрдХрд╛ рд╢рдмреНрдж, рдХреЙрдорд░реЗрдб рдСрдЯреЛрдЯреЗрд╕реНрдЯрд░!
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдПрдХ рдЫреЛрдЯреА рд╕реА рдЪрд╛рд▓ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдХрд╡рд░реЗрдЬ рдмрдврд╝рд╛рдиреЗ рдФрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рд╕реНрдерд┐рд░ рдФрд░ рддреЗрдЬ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ - рдЙрдкрдЪрд░реНрдо рдкрд░реАрдХреНрд╖рдг ("рдЪрдордбрд╝реЗ рдХреЗ рдиреАрдЪреЗ рдкрд░реАрдХреНрд╖рдг"), рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдЪреАрдЬреЗрдВ рдкрд╣рд▓реЗредрд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рд░
рдСрдЯреЛрдореЗрдЯрд░ рдХрд╛ рдкрд╣рд▓рд╛ рд╕рд╢рд░реНрдд рдкрд▓рдЯрд╛ рд╕реЗрд▓реЗрдирд┐рдпрдо (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдпрд╛ рддреЛ рд╕реЗрд▓реЗрдирд╛рдЗрдб рдпрд╛ рдпреВрдЖрдИ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрдиреНрдп рд╡рд┐рд▓рдХреНрд╖рдг) рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ рдЙрджреНрдпреЛрдЧ рдорд╛рдирдХ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдИ рдХрд╛рд░рдг рд╣реИрдВ рдХрд┐ рдпрд╣ рдмрдВрдж рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ:- UI рдкрд░реАрдХреНрд╖рдг рдзреАрдорд╛ рд╣реИрдВред рдЗрд╕рд╕реЗ рдХреЛрдИ рдмрдЪрд╛ рдирд╣реАрдВ рд╣реИред рдЙрдиреНрд╣реЗрдВ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рджрд╛рдпрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдереЛрдбрд╝рд╛ рддреЗрдЬ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдмрдиреЗ рд░рд╣реЗрдВрдЧреЗред
- рдпреВрдЖрдИ рдкрд░реАрдХреНрд╖рдг рдЕрд╕реНрдерд┐рд░ рд╣реИрдВред рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдзреАрдореЗ рд╣реИрдВред рдФрд░ рдЗрд╕рд▓рд┐рдП рднреА рдХрд┐ рд╡реЗрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдХрдВрдкреНрдпреВрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдпрд╣ рдкреНрд░рд╡реГрддреНрддрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдмрджрд▓ рд░рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рддрдереНрдп рд╕реЗ рдирд╣реАрдВ рдХрд┐ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ)ред
- UI- тАФ . . ( , , , ┬л┬╗ - , ).
- , , , UI- . . ID XPath . , ┬л┬╗ - - . , , тАФ - , .
- рдХреЛрдИ рдХрд╣реЗрдЧрд╛ рдХрд┐ рдХреБрдЫ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЕрдиреНрдпрдерд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпрджрд┐ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдХреЗрд╡рд▓ UI рдкрд░реАрдХреНрд╖рдгреЛрдВ (рд╕реНрд╡рдпрдВ UI рддрд░реНрдХ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде) рджреНрд╡рд╛рд░рд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЙрддреНрдкрд╛рдж рдореЗрдВ рд╡рд╛рд╕реНрддреБ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдВрдХреЗрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдпреВрдЖрдИ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд▓рд╕ рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рдЖрдкрдХреЛ рдЙрддреНрдкрд╛рдж рдХреЗ рдХреЛрдб рдХреЛ рдЧреЛрддрд╛ рд▓рдЧрд╛рдиреЗ рдФрд░ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рдЙрдкрдпреЛрдЧреА рдЬрд╛рдВрдЪ "рдлреЗрдВрдХ" рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдЬреЛ рд╢рд╛рдпрдж рд╣реА рд▓рдВрдмреЗ рд╕рдордп рдореЗрдВ рдПрдХ рдкреНрд▓рд╕ рд╣реИред рдЗрд╕ рдкреНрд░рд╕реНрддреБрддрд┐ рдореЗрдВ рдЗрд╕реЗ рдХреНрдпреЛрдВ рд╕реБрдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХреА рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╡реНрдпрд╛рдЦреНрдпрд╛ редрджреВрд╕рд░рд╛ рддрд░реАрдХрд╛
рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдорд╛рдорд▓реЗ рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдЗрдП рдПрдХ рдРрд╕реЗ рдЖрд╡реЗрджрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдПрдХ рдРрд╕реЗ рдлреЙрд░реНрдо рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛрдВ рдЬрд╣рд╛рдВ рдЖрдк рдПрдХ рд╡реИрдз рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рджрд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдирд┐рдпрдореЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЖрд╡реЗрджрди рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: github.com/senpay/login-form ред рдЖрдкрдХреЛ рдЪреЗрддрд╛рд╡рдиреА рджреА рдЧрдИ рдереА - рдЖрд╡реЗрджрди рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреАрдбрд╝реЗ рд╣реИрдВ рдФрд░ рдХреЛрдИ рдлреИрд╢рдиреЗрдмрд▓ рдЙрдкрдХрд░рдг рдФрд░ рд░реВрдкрд░реЗрдЦрд╛ рдирд╣реАрдВ рд╣реИрдВредрдпрджрд┐ рдЖрдк рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЪреЗрдХ рд╢реАрдЯ "рдлреЗрдВрдХ" рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдХреБрдЫ рдРрд╕рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:рдХреНрдпрд╛ рдпрд╣ рд╕рд░рд▓ рджрд┐рдЦрддрд╛ рд╣реИ? рд╕реАрдзреЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ! рдХреНрдпрд╛ рдореИрдВ рдпреВрдЖрдИ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реВрдВ? рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓рд┐рдЦрд┐рдд рдкрд░реАрдХреНрд╖рд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг (рдПрдХ рдкреВрд░реНрдг рдХреЗ рд╕рд╛рде рд╕рд╛рде рддреАрди - рд╕реНрддрд░ рдврд╛рдВрдЪрд╛ ) рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ LoginFormTest.java рдЕрдЧрд░ рдЖрдк рдХреЗ рдкрд╛рд╕ рдЬрд╛рдУ uitests рдореЗрдВ рд▓реЗрдмрд▓ Git ( Git рдЪреЗрдХрдЖрдЙрдЯ uitests ):public class LoginFormTest {
SelenideMainPage sut = SelenideMainPage.INSTANCE;
private static final String APPLICATION_URL = "http://localhost:4567/index";
@BeforeClass
public static void setUpClass() {
final String[] args = {};
Main.main(args);
Configuration.browser = "firefox";
}
@Before
public void setUp() {
open(APPLICATION_URL);
}
@After
public void tearDown() {
close();
}
@Test
public void shouldBeAbleToAddNewUser() {
sut.setUserName("MyCoolNewUser");
sut.clickSubmit();
Assert.assertEquals("Status: user MyCoolNewUser was created", sut.getStatus());
Assert.assertTrue(sut.getUsers().contains("Name: MyCoolNewUser"));
}
@Test
public void shouldNotBeAbleToAddEmptyUseName() {
final int numberOfUsersBeforeTheTest = sut.getUsers().size();
sut.clickSubmit();
Assert.assertEquals("Status: Login cannot be empty", sut.getStatus());
Assert.assertEquals(numberOfUsersBeforeTheTest, sut.getUsers().size());
}
}
рдЗрд╕ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдореИрдЯреНрд░рд┐рдХреНрд╕:рд░рдирдЯрд╛рдЗрдо: ~ 12 рд╕реЗрдХрдВрдб (рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдЬрдм рдореИрдВ рдЗрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдЪрд▓рд╛рддрд╛ рдерд╛ рддреЛ 12 рд╕реЗрдХрдВрдб 956 рдорд┐рд▓реАрд╕реЗрдХрдВрдб)рдХреЛрдб рдХрд╡рд░реЗрдЬрдХреНрд▓рд╛рд╕: 100%рд╡рд┐рдзрд┐: 93.8% (30/32)рд▓рд╛рдЗрди: 97.4% (75/77) )рдЕрдм рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ рдХрд┐ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдСрдЯреЛрдЯреЗрд╕реНрдЯ рдХреЛ рдпреВрдЖрдИ рдХреЗ "рддреБрд░рдВрдд рдиреАрдЪреЗ" рд╕реНрддрд░ рдкрд░ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рддрдХрдиреАрдХ рдХреЛ Subcutaneous рдЯреЗрд╕реНрдЯ ("рд╕рдмрдХрдЯрд┐рд╕реНрдЯрд┐рдХ рдЯреЗрд╕реНрдЯ" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ - рдРрд╕реЗ рдкрд░реАрдХреНрд╖рдг рдЬреЛ рдкреНрд░рджрд░реНрд╢рди рддрд░реНрдХ рдХреЗ рд╕реНрддрд░ рд╕реЗ рддреБрд░рдВрдд рдиреАрдЪреЗ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВ) рдФрд░ рдорд╛рд░реНрдЯрд┐рди рдлреЙрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдХрд╛рдлреА рдкрд╣рд▓реЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ [ 1 ]редрдЬрдм рд▓реЛрдЧ "рдиреЙрди-рдпреВрдЖрдИ" рдСрдЯреЛрдЯреЗрд╕реНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ, рддреЛ рдЕрдХреНрд╕рд░ рд╡реЗ REST / SOAP рдпрд╛ рдЗрд╕рдХреЗ API рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдПрдкреАрдЖрдИ (рдПрдкреНрд▓реАрдХреЗрд╢рди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЗрдВрдЯрд░рдлреЗрд╕) рдПрдХ рдмрд╣реБрдд рд╡реНрдпрд╛рдкрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ, рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рдпрд╣ HTTP рдФрд░ рдЕрдиреНрдп рд╣реЗрд╡реАрд╡реЗрдЯ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗредрдпрджрд┐ рд╣рдо рдЙрддреНрдкрд╛рдж рдХреЛрдб рдЪреБрдирддреЗ рд╣реИрдВ , рддреЛ рд╣рдо рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ:public class UserApplication {
private static IUserRepository repository = new InMemoryUserRepository();
private static UserService service = new UserService(); {
service.setUserRepository(repository);
}
public Map<String, Object> getUsersList() {
return getUsersList("N/A");
}
public Map<String, Object> addUser(final String username) {
final String status = service.addUser(username);
final Map<String, Object> model = getUsersList(status);
return model;
}
private Map<String, Object> getUsersList(String status) {
final Map<String, Object> model = new HashMap<>();
model.put("status", status);
model.put("users", service.getUserInfoList());
return model;
}
}
рдЬрдм рд╣рдо UI рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛ рдПрдХ рдирдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреЛрдбрд╝реА рдЬрд╛рддреА рд╣реИ, рдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рд╕реВрдЪреА рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддреА рд╣реИред рдпрджрд┐ рд╣рдо рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╕реАрдзреЗ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ ? рдЖрдЦрд┐рд░рдХрд╛рд░, рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдПрдкреАрдЖрдИ рд╣реИ! рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд, рдЖрд░рдИрдПрд╕рдЯреА рдФрд░ рдЕрдиреНрдп рдПрдкреАрдЖрдИ рднреА рдЙрд╕реА рд╕рд┐рджреНрдзрд╛рдВрдд рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ - рд╡реЗ "рдирд┐рдпрдВрддреНрд░рдХ рд╕реНрддрд░" рдХреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд┐рдзрд┐ рдХрд╣рддреЗ рд╣реИрдВредрдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╕реАрдзреЗ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдПрдХ рд╕рд░рд▓ рдФрд░ рдмреЗрд╣рддрд░ рдкрд░реАрдХреНрд╖рд╛ рд▓рд┐рдЦ тАЛтАЛрд╕рдХрддреЗ рд╣реИрдВ:public class UserApplicationTest {
private UserApplication sut;
@Before
public void setUp() {
sut = new UserApplication();
}
@Test
public void shouldBeAbleToAddNewUser() {
final Map<String, Object> myCoolNewUser = sut.addUser("MyCoolNewUser");
Assert.assertEquals("user MyCoolNewUser was created", myCoolNewUser.get("status"));
Assert.assertTrue(((List) myCoolNewUser.get("users")).contains("Name: MyCoolNewUser"));
}
@Test
public void shouldNotBeAbleToAddEmptyUseName() {
final Map<String, Object> usersBeforeTest = sut.getUsersList();
final int numberOfUsersBeforeTheTest = ((List) usersBeforeTest.get("users")).size();
final Map<String, Object> myCoolNewUser = sut.addUser("");
Assert.assertEquals("Login cannot be empty", myCoolNewUser.get("status"));
Assert.assertEquals(numberOfUsersBeforeTheTest, ((List) myCoolNewUser.get("users")).size());
}
}
рдпрд╣ рдХреЛрдб рд▓реЗрдмрд▓ рдЙрдкрдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рддрд╣рдд рдЙрдкрд▓рдмреНрдз рд╣реИ :git checkout subctests
рдЖрдЗрдП рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ?рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп: ~ 21 рдорд┐рд▓реАрд╕реЗрдХрдВрдбрдХреЛрдб рдХрд╡рд░реЗрдЬ :рдХреНрд▓рд╛рд╕: 77.8%рд╡рд┐рдзрд┐: 78.1 (30/32)рд▓рд╛рдЗрди: 78.7 (75/77)рд╣рдордиреЗ рдереЛрдбрд╝рд╛ рдХрд╡рд░реЗрдЬ рдЦреЛ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдЧрддрд┐ 600 рдЧреБрдирд╛ рдмрдврд╝ рдЧрдИ !!!
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд╡рд░реЗрдЬ рдХрд╛ рдиреБрдХрд╕рд╛рди рдХрд┐рддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг / рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ? рд╣рд╛рд▓рд╛рдд рдХреЗ рдЙрдкрд░ рдирд┐рд░реНрднрд░ред рд╣рдордиреЗ рдереЛрдбрд╝рд╛ рдЧреЛрдВрдж рдХреЛрдб рдЦреЛ рджрд┐рдпрд╛ рд╣реИ, рдЬреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдпрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) (рдореИрдВ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдХреМрди рд╕рд╛ рдХреЛрдб рд╡реНрдпрд╛рдпрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдЦреЛ рдЧрдпрд╛ рд╣реИ)редрдХреНрдпрд╛ рдХрд╡рд░реЗрдЬ рдХрд╛ рдпрд╣ рдиреБрдХрд╕рд╛рди рдпреВрдЖрдИ рд╕реНрддрд░ рдкрд░ рд╣реЗрд╡реАрд╡реЗрдЯ рдкрд░реАрдХреНрд╖рдг рдХреА рд╢реБрд░реБрдЖрдд рдХреЛ рд╕рд╣реА рдард╣рд░рд╛рддрд╛ рд╣реИ? рдпрд╣ рд╕реНрдерд┐рддрд┐ рдкрд░ рднреА рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:- рдЧреЛрдВрдж рдХреЛрдб рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ UI рдкрд░реАрдХреНрд╖рдг рдЬреЛрдбрд╝реЗрдВ, рдпрд╛
- рдпрджрд┐ рд╣рдо рдЧреЛрдВрдж рдХреЛрдб рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рдмрджрд▓рд╛рд╡ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ - рдЗрд╕реЗ рдСрдЯреЛрдЯреЗрд╕реНрдЯреНрд╕ рдХреЗ рдмрд┐рдирд╛ рдЫреЛрдбрд╝ рджреЗрдВ, рдпрд╛
- рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ "рдореИрдиреБрдЕрд▓" рдкрд░реАрдХреНрд╖рдг рдХреЗ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ, рддреЛ рдПрдХ рдорд╣рд╛рди рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЧреЛрдВрдж рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдкрд░реАрдХреНрд╖рдХ рджреНрд╡рд╛рд░рд╛ рджреЗрдЦрд╛ рдЬрд╛рдПрдЧрд╛, рдпрд╛
- рдХреБрдЫ рдФрд░ (рд╕рдорд╛рди рдХреИрдирд░реА рддреИрдирд╛рддреА) рдХреЗ рд╕рд╛рде рдЖрдУ
рдЖрдЦрд┐рд░рдХрд╛рд░
- UI рдпрд╛ REST / SOAP API рд╕реНрддрд░ рдкрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдСрдЯреЛрдЯреЗрд╕реНрдЯ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдХрдИ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ "рдЙрдкрдЪрд░реНрдо рдкрд░реАрдХреНрд╖рдг" рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдзрд┐рдХ рдЧрддрд┐ рдФрд░ рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдЧрд╛ред
- рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдиреБрдХрд╕рд╛рди рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╡рд░реЗрдЬ рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдиреБрдХрд╕рд╛рди рд╣реИред
- рдХрд╡рд░реЗрдЬ рдЦреЛрдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ " рдлрд╝реАрдЪрд░ рдЯреЗрд╕реНрдЯ рдореЙрдбрд▓ "
- рд▓реЗрдХрд┐рди рдХрд╡рд░реЗрдЬ рдХреЗ рдиреБрдХрд╕рд╛рди рдХреЗ рд╕рд╛рде рднреА, рдЧрддрд┐ рдФрд░ рд╕реНрдерд┐рд░рддрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред
рд▓реЗрдЦ рдХрд╛ рдПрдХ рдЕрдВрдЧреНрд░реЗрдЬреА рд╕рдВрд╕реНрдХрд░рдг рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реИ ред