我会在接收列表并返回String的函数内部进行调用。我尝试了几个网站,但我不能理解我的案例是如何调整代码的。我有这个代码来模拟:
public class Procesa {
public String preparaComando (List <String> comando){
Prepara prepara = new Prepara();
List <String> comandoCodificado = new ArrayList<String>();
comandoCodificado = prepara.preparaTexto(comando);
String textoRetorno = "";
for (String cadena : comando)
textoRetorno+= cadena + " ";
return textoRetorno;
}
....
}
我试过这个测试:
@RunWith(MockitoJUnitRunner.class)
public class ProcesaTest {
@Mock
Procesa procesa = mock(Procesa.class);
@Mock
Prepara preparaCom = mock(Prepara.class);
....
@Test
public void TestPreparaComando() {
List lista = new ArrayList<>();
lista.add("encenderluzcocina");
verify(procesa).preparaComando(anyList()).contains("encender");
assertEquals("encenderluzcocina", procesa.preparaComando(anyList()));
}
}
如何测试此功能?
答案 0 :(得分:1)
您应不使用任何模拟来测试此类代码。您的方法接收字符串列表;它返回一个字符串。这应该是最重要的。
换句话说:你的方法有一定的契约:给定输入X,它应该提供输出Y.该方法如何从X到Y - 在实现细节下。并且您不测试实施细节。
因此,简而言之,答案是:你退后一步,找出一整套有意义的输入值{X1,X2,...,Xn}。然后确定哪个输出值{Y1,Y2,... Yn}对应于每个输入。现在你写n个测试;每对一对,习。
[提示:它也可能是有效的&#34; Yi&#34;期望抛出某个例外;而不是返回值]
长话短片:如果你的方法有这么好的输入/输出设置;那么你应该仅使用断言来测试它。如果您的方法通过更改您所测试的类中的其他内容来工作;然后考虑添加允许您检查该状态的getter。
如果需要进行模拟,那么您应该使用依赖注入来提供&#34;模拟&#34;在你的课堂上考试。
最后:如果您有兴趣学习如何编写可测试代码,请观看这些videos!
答案 1 :(得分:1)
为了补充其他答案,我们还可以编写一个所谓的白盒测试(也称为&#34;隔离单元测试&#34;),其中{{1}依赖被嘲笑。
例如,可以编写以下测试(在此使用JMockit模拟库,也可以使用其他库):
Prepara
尽管如此,黑盒测试几乎总是比白盒测试更好。