рдСрдЯреЛрдЯреЗрд╕реНрдЯреНрд╕ рдХреЛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рд▓рд┐рдЦрдирд╛ - рдЙрдкрдЪрд░реНрдо рдкрд░реАрдХреНрд╖рдг

рдЖрдЗрдП рдПрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ рд╕рд┐рдЯреМрдПрд╢рди рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ (рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдбреБрдмрдХреА рд▓рдЧрд╛рддреЗ рд╣реИрдВ)ред рдЖрдкрдХреЛ "рдЧрд╢" рд╕реНрд╡рдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реМрдВрдкреА рдЧрдИ рд╣реИред рдЖрдкрдХреЛ "рдореИрдиреБрдЕрд▓" рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ (рдЙрдирдореЗрдВ рд╕реЗ рд╣рдЬрд╛рд░реЛрдВ!) рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рд╢рд╛рд▓ рдкрд░реАрдХреНрд╖рдг рдпреЛрдЬрдирд╛ рджреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЛ рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ, рдФрд░ рд╡рд╣реАрдВред рдФрд░ рдпрд╣ рднреА, рдЬрд▓реНрджреА рдФрд░ stably рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдмрд╣реБрдд рджреЗрд░ рд╣реЛ рдЪреБрдХреА рд╣реИ , рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЯреАрдбреАрдбреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рд╕реЛрдЪреЗрдВ , рддреЛ рдЙрддреНрдкрд╛рдж рдХреЛрдб рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдЖрдкрдХрд╛ рд╢рдмреНрдж, рдХреЙрдорд░реЗрдб рдСрдЯреЛрдЯреЗрд╕реНрдЯрд░!

рдЫрд╡рд┐

рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдПрдХ рдЫреЛрдЯреА рд╕реА рдЪрд╛рд▓ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдХрд╡рд░реЗрдЬ рдмрдврд╝рд╛рдиреЗ рдФрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рд╕реНрдерд┐рд░ рдФрд░ рддреЗрдЬ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ - рдЙрдкрдЪрд░реНрдо рдкрд░реАрдХреНрд╖рдг ("рдЪрдордбрд╝реЗ рдХреЗ рдиреАрдЪреЗ рдкрд░реАрдХреНрд╖рдг"), рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдЪреАрдЬреЗрдВ рдкрд╣рд▓реЗред


рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рд░


рдСрдЯреЛрдореЗрдЯрд░ рдХрд╛ рдкрд╣рд▓рд╛ рд╕рд╢рд░реНрдд рдкрд▓рдЯрд╛ рд╕реЗрд▓реЗрдирд┐рдпрдо (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдпрд╛ рддреЛ рд╕реЗрд▓реЗрдирд╛рдЗрдб рдпрд╛ рдпреВрдЖрдИ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрдиреНрдп рд╡рд┐рд▓рдХреНрд╖рдг) рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ рдЙрджреНрдпреЛрдЧ рдорд╛рдирдХ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдИ рдХрд╛рд░рдг рд╣реИрдВ рдХрд┐ рдпрд╣ рдмрдВрдж рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ:

  • UI рдкрд░реАрдХреНрд╖рдг рдзреАрдорд╛ рд╣реИрдВред рдЗрд╕рд╕реЗ рдХреЛрдИ рдмрдЪрд╛ рдирд╣реАрдВ рд╣реИред рдЙрдиреНрд╣реЗрдВ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рджрд╛рдпрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдереЛрдбрд╝рд╛ рддреЗрдЬ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдмрдиреЗ рд░рд╣реЗрдВрдЧреЗред
  • рдпреВрдЖрдИ рдкрд░реАрдХреНрд╖рдг рдЕрд╕реНрдерд┐рд░ рд╣реИрдВред рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдзреАрдореЗ рд╣реИрдВред рдФрд░ рдЗрд╕рд▓рд┐рдП рднреА рдХрд┐ рд╡реЗрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдХрдВрдкреНрдпреВрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдпрд╣ рдкреНрд░рд╡реГрддреНрддрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдмрджрд▓ рд░рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рддрдереНрдп рд╕реЗ рдирд╣реАрдВ рдХрд┐ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ)ред
  • UI- тАФ . . ( , , , ┬л┬╗ - , ).
  • , , , UI- . . ID XPath . , ┬л┬╗ - - . , , тАФ - , .
  • рдХреЛрдИ рдХрд╣реЗрдЧрд╛ рдХрд┐ рдХреБрдЫ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЕрдиреНрдпрдерд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпрджрд┐ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдХреЗрд╡рд▓ UI рдкрд░реАрдХреНрд╖рдгреЛрдВ (рд╕реНрд╡рдпрдВ UI рддрд░реНрдХ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде) рджреНрд╡рд╛рд░рд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЙрддреНрдкрд╛рдж рдореЗрдВ рд╡рд╛рд╕реНрддреБ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдВрдХреЗрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдпреВрдЖрдИ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд▓рд╕ рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рдЖрдкрдХреЛ рдЙрддреНрдкрд╛рдж рдХреЗ рдХреЛрдб рдХреЛ рдЧреЛрддрд╛ рд▓рдЧрд╛рдиреЗ рдФрд░ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рдЙрдкрдпреЛрдЧреА рдЬрд╛рдВрдЪ "рдлреЗрдВрдХ" рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдЬреЛ рд╢рд╛рдпрдж рд╣реА рд▓рдВрдмреЗ рд╕рдордп рдореЗрдВ рдПрдХ рдкреНрд▓рд╕ рд╣реИред рдЗрд╕ рдкреНрд░рд╕реНрддреБрддрд┐ рдореЗрдВ рдЗрд╕реЗ рдХреНрдпреЛрдВ рд╕реБрдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХреА рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╡реНрдпрд╛рдЦреНрдпрд╛ ред

рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛


рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдорд╛рдорд▓реЗ рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдЗрдП рдПрдХ рдРрд╕реЗ рдЖрд╡реЗрджрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдПрдХ рдРрд╕реЗ рдлреЙрд░реНрдо рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛрдВ рдЬрд╣рд╛рдВ рдЖрдк рдПрдХ рд╡реИрдз рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рджрд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдирд┐рдпрдореЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред



рдЖрд╡реЗрджрди рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: github.com/senpay/login-form ред рдЖрдкрдХреЛ рдЪреЗрддрд╛рд╡рдиреА рджреА рдЧрдИ рдереА - рдЖрд╡реЗрджрди рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреАрдбрд╝реЗ рд╣реИрдВ рдФрд░ рдХреЛрдИ рдлреИрд╢рдиреЗрдмрд▓ рдЙрдкрдХрд░рдг рдФрд░ рд░реВрдкрд░реЗрдЦрд╛ рдирд╣реАрдВ рд╣реИрдВред

рдпрджрд┐ рдЖрдк рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЪреЗрдХ рд╢реАрдЯ "рдлреЗрдВрдХ" рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдХреБрдЫ рдРрд╕рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рд╕рдВрдЦреНрдпрд╛рдХрджрдордЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо
11. рдПрдХ рд╡реИрдз рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рджрд░реНрдЬ
рдХрд░реЗрдВ 2. "рд▓реЙрдЧ рдЗрди" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ

2. 1. рдПрдХ рдирдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
21. рдПрдХ рдЦрд╛рд▓реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рджрд░реНрдЬ
рдХрд░реЗрдВ 2. "рд▓реЙрдЧ рдЗрди" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
1.
2. рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рд╕рд░рд▓ рджрд┐рдЦрддрд╛ рд╣реИ? рд╕реАрдзреЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ! рдХреНрдпрд╛ рдореИрдВ рдпреВрдЖрдИ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реВрдВ? рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓рд┐рдЦрд┐рдд рдкрд░реАрдХреНрд╖рд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг (рдПрдХ рдкреВрд░реНрдг рдХреЗ рд╕рд╛рде рд╕рд╛рде рддреАрди - рд╕реНрддрд░ рдврд╛рдВрдЪрд╛ ) рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ 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 рд╕реНрддрд░ рдкрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдСрдЯреЛрдЯреЗрд╕реНрдЯ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдХрдИ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ "рдЙрдкрдЪрд░реНрдо рдкрд░реАрдХреНрд╖рдг" рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдзрд┐рдХ рдЧрддрд┐ рдФрд░ рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдЧрд╛ред
  • рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдиреБрдХрд╕рд╛рди рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╡рд░реЗрдЬ рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдиреБрдХрд╕рд╛рди рд╣реИред
  • рдХрд╡рд░реЗрдЬ рдЦреЛрдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ " рдлрд╝реАрдЪрд░ рдЯреЗрд╕реНрдЯ рдореЙрдбрд▓ "
  • рд▓реЗрдХрд┐рди рдХрд╡рд░реЗрдЬ рдХреЗ рдиреБрдХрд╕рд╛рди рдХреЗ рд╕рд╛рде рднреА, рдЧрддрд┐ рдФрд░ рд╕реНрдерд┐рд░рддрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред


рд▓реЗрдЦ рдХрд╛ рдПрдХ рдЕрдВрдЧреНрд░реЗрдЬреА рд╕рдВрд╕реНрдХрд░рдг рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реИ ред

All Articles