Возможно, я прошу что-то совершенно очевидное. У меня нет большого опыта написания модульных тестов, и появился следующий вопрос, который заставил меня задуматься.Единичные тесты, можете ли вы протестировать один метод?
Скажите, у вас есть класс, и у этого класса есть методы, которые вы хотите протестировать. Но можете ли вы одновременно протестировать один метод? Думаю, нет. Чтобы протестировать метод, вам нужно вызвать один или несколько других методов. Например:
class MyClass {
int x;
void foo() { x = 4; }
boolean bar() { x = 3; }
boolean check() { return x == 4; }
}
Для того, чтобы проверить Foo и бар, мне нужно использовать чек(), а с другой стороны, для того, чтобы проверить проверить, что нужно использовать либо Foo() или бар().
Скажем, я должен следующего теста:
class MyClassTest {
@Test
void testFoo() {
MyClass obj = new MyClass();
obj.foo();
assert obj.check();
}
}
Теперь давайте предположим, мой коллега изменяет метод проверки():
boolean check() { return x == 5; }
Конечно, testFoo() потерпит неудачу, и можно подумать, что существует проблема с методом foo.
Итак, это похоже на ситуацию с куриным яйцом. Как люди обычно это разрешают?
Что такое единица измерения? Обычно это область, в которой она применима к тесту ... иногда это так же аккуратно, как и один метод, но часто вам нужно создать «приспособление» или «набор», чтобы определить свою «единицу работы». –