Создание модульного теста, который гарантирует, что метод принимает только некоторые значения в качестве параметра param1 во время выполнения.
Код теста с двумя сценариями: допустимый и недействительный регистр.
Например, в JUnit 5:
@Test
public void doSomething(){
Assert.AssertTrue(new Foo().doSomething("String1", "anyValue");
Assert.AssertTrue(new Foo().doSomething("String2", "anyValue");
Assert.AssertTrue(new Foo().doSomething("String3", "anyValue");
}
@Test
public void doSomething_with_illegal_argument(){
Assert.assertThrows(IllegalArgumentException.class, () -> new Foo().doSomething("invalidValue", "anyValue"));
}
Тест должен завершиться неудачно, поскольку вы на самом деле этого не делаетегарантировать это.Итак, улучшите вашу фактическую реализацию, чтобы пройти тест.
Например:
public boolean doSomething(String param1, String param2) {
if (!"String1".equals(param1) &&
!"String2".equals(param1) &&
!"String3".equals(param1) {
throw new IllegalArgumentException("param1 should be ...");
}
... // processing
}
Я бы добавил, что тестовая единица не может охватить все неудачные случаи, если неисправные случаи - это любые String
, но 3 специфических String
s: это миллионывозможностей.
В вашем случае я думаю, что лучший способ сделать ваш код более устойчивым - это использовать ограниченный тип в качестве перечисления.Вы можете определить перечисление, которое содержит 3 значения, и предоставить конструктору перечисления значение String
, фактически переданное в качестве параметра.
Это может выглядеть так:
public boolean doSomething(MyEnum param1Enum, String param2){
...
String param1 = param1Enum.getString();
}