Это гипотетическая ситуация.Я использую int в качестве типа, но вы можете свободно заменить его любым типом по вашему выбору, это вопрос о том, как написать тест, который подтверждает, что никто не изменил сигнатуру метода.
Я написал метод, который очень хорошо работает с целыми числами, но будет очень трудно отследить ошибки, если он когда-либо получит определенные нецелые числа.Я хочу избежать ошибок, поэтому я написал несколько тестов, чтобы подтвердить, что метод работает правильно.Я пишу на Java, поэтому могу с радостью положиться на строгую типизацию Java.Однако, однажды, кто-то захочет изменить этот метод, чтобы он принимал некоторые нецелые числа (возможно, я), и иногда это будет работать (я буду очень гордиться собой).Они (I) могут даже написать некоторые тесты, чтобы добавить их улучшенную версию метода, и эти тесты пройдут, если они не пройдут определенные нецелые числа.
Можно ли написать тест, который подтверждаетчто подпись метода не изменилась?
Я пробовал это, но myClass.multiply(2.0, 2);
не компилируется, поэтому я не могу запустить тест.
import org.junit.Assert;
import org.junit.Test;
import static org.junit.Assert.fail;
public class TestingCoercion {
@Test
public void multiply2x2() {
MyClass myClass = new MyClass();
Assert.assertEquals(myClass.multiply(2, 2), 4);
}
@Test
public void multiplyDoesNotWorkWithFloat() {
MyClass myClass = new MyClass();
try {
myClass.multiply(2.0, 2); //this line does not compile
fail("MyClass.multiply is only for integers");
} catch (Exception exception) {
Assert.assertTrue("MyClass.multiply correctly rejected a double", true);
}
}
class MyClass {
public int multiply(int i, int j) {
return i * j;
}
}
}