-
Notifications
You must be signed in to change notification settings - Fork 11
/
MyClassTest.java
130 lines (116 loc) · 4.72 KB
/
MyClassTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
import org.junit.*;
//import static org.junit.Assert.*;
// Тесты в JUnit
//
// Цель: Либо протестировать уже готовый код.
//
// Либо **регрессионное** тестирование:
// * Один раз проверили что код работает верно
// * Написали тест, который проверяет что код возвращает одни и
// те же результаты
// * На каждой новой версии продукта запускаем
// эти же тесты.
//
// **TDD (Test Driven Development)** -
// разработка через тестирование.
// Принцип: сначала тест, потом код чтобы тест проходил.
public class MyClassTest extends Assert /*TestCase*/ /* JUnit3 */ {
@BeforeClass
public static void beforeClass() {
System.out.println("MyClassTest.beforeClass");
System.out.println("!!!");
}
//<--
@AfterClass
public static void afterClass() {
System.out.println("MyClassTest.afterClass");
}
// Первый тест
// Название метода произвольное для JUnit4
// Для предыдущих версий важно чтобы метод начинался
// с "test". Поэтому для совместимости чаще
// всего называют метод начиная с "test"
// и добавляют аннотацию
//-->
@Test // Аннотация (начиная с JUnit4)
// указывает что это тест
public void testSimplest() { // startWith("test") - JUnit3 и ранее
// assertEquals(expected, actual)
// assertEquals(message, expected, actual)
int calc = 2 * 2;
assertEquals("Дважды два четыре", 4, calc);
// Действительные числа сравниваются с погрешностью
assertEquals("Дважды два четыре", 4.0, 2.0 * 2.0,
1e-15);
// Сокращённая форма без message
assertEquals(4, 2 * 2);
// Конкатенация строк
assertEquals("test123", "test" + "123");
// Сравнение массивов
assertArrayEquals(new byte[]{1, 2, 3}, new byte[]{1, 2, 3});
// Специальная форма для Boolean
assertTrue(1 < 2);
assertFalse(3 > 4);
}
// Пример: тестируем вычисление факториала
// Важен баланс между:
// - временем выполнения тестов
// - покрытием (рассмотреть все варианты)
//-->
@Test
public void testFactorial() {
assertEquals("1! = ", 1, MyClass.fact(1));
assertEquals(2, MyClass.fact(2));
assertEquals(6, MyClass.fact(3));
assertEquals(2 * 3 * 4, MyClass.fact(4));
assertEquals(2 * 3 * 4 * 5, MyClass.fact(5));
assertEquals(2 * 3 * 4 * 5 * 6, MyClass.fact(6));
assertEquals(2 * 3 * 4 * 5 * 6 * 7, MyClass.fact(7));
assertEquals(2 * 3 * 4 * 5 * 6 * 7 * 8, MyClass.fact(8));
assertEquals(2 * 3 * 4 * 5 * 6 * 7 * 8 * 9, MyClass.fact(9));
assertEquals(2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10, MyClass.fact(10));
assertEquals(2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 * 11, MyClass.fact(11));
}
/**
* Тест с ожидаемым исключением
*
* @see Test
*/
@Ignore // Исправим в версии 5.2
@Test(expected = IllegalArgumentException.class)
public void testExpectedException() {
//System.out.println("Test: " + getName());
System.out.println("MyClassTest.testExpectedException");
throw new IllegalArgumentException("Test");
}
@Test
public void testFail() {
System.out.println("MyClassTest.testFail: start");
try {
if (1 < 2)
throw new IllegalArgumentException("Error description");
// ...
fail("IllegalArgumentException expected");
} catch (IllegalArgumentException e) {
assertEquals("Error description", e.getMessage());
}
assertNotNull(new MyClassTest());
assertNull(null);
assertTrue(1 < 2);
assertFalse(1 > 2);
System.out.println("MyClassTest.testFail: finish");
}
@Before
public void setUp() {
System.out.println("MyClassTest.setUp");
}
@Before
public void setUp2() {
System.out.println("MyClassTest.setUp2");
}
@After
public void tearDown() {
System.out.println("MyClassTest.tearDown");
}
//<--
}