我有以下课程并想为它编写单元测试。以下是完整参考的课程。 X
是POJO
public class StatusTable {
private P tableData;
private Q tableDefinition;
public StatusTable(final List<X> xList,
final A a,
final B b)
throws URISyntaxException {
setTableDefinition(a, b);
setTableData(xList, b, a);
}
private void setTableDefinition(final A a,
final B b) {
//some code
}
public void setTableData(final List<X> xList,
final B b, final A a)
throws URISyntaxException {
for (X sfm : xList) {
//some code
}
}
}
作为单元测试的新手,我对如何测试的想法很少,但这是一个想法。如果不正确,请纠正我。
public class StatusTableTest {
private StatusTable statusTable;
@Mock
private A mockA;
@Mock
private B mockB;
@Mock
private X mockX;
public void setUp() {
stub(mockX.getSomeValue()).toReturn(?); //want to return any string
stub(mockX.getSomeAnotherValue()).toReturn(?); //want to return any integer
//Similarly mock other functions retuning
this.statusTable = new StatusTable(xList, mockA, mockB,);
}
public void setTableDefinitionTest() {
//test the code
}
}
我有些疑惑:
a)我做得对吗? X应该被嘲笑吗?
b)Mockito中是否存在anyString()类型的功能,还是应该使用其他功能?
答案 0 :(得分:0)
a)没有实际代码很难分辨。您可以模拟单个X值或整个X列表。
b)您的最终结果基于预期值,因此您不应该返回anyString(),而是返回一些特定的String。因此,您可以验证您的代码对此特定String的行为是否正确。即断言该表包含单个单元格&#34; abc&#34;文本如果传递列表,其中一个X返回&#34; abc&#34;。
答案 1 :(得分:0)
取决于您想要模拟的内容。
你可以模拟对你的类的任何调用,并返回任何值或间谍现有的类,并通过模拟调用重载调用。
例如
mockedX = Mockito.mock(X.class);
Mockito.when(mockedX.someFunction("1")).thenReturn(someAnswer);
或:
X x = new X();
spiedX = Mockito.spy(x);
Mockito.answer(some answer).when(spiedX).someFunction("1");
请记住......模拟的类会返回你正在嘲笑的东西。
如果您创建这样的模拟:
Mockito.when(mockedX.someFunction(Mockito.anyString())).thenReturn("A");
然后在每次调用时,someFunction()将返回“A”。