JMockit 在 while 循环中模拟一个对象
JMockit Mock an object inside while loop
我正在为以下测试 class 方法编写测试。
public String doSomething(Dependency dep) {
StringBuilder content = new StringBuilder();
String response;
while ((response = dep.get()) != null) {
content.append(response);
}
return content.toString();
}
下面是我的测试用例。基本上,我希望 Dependency#get()
方法在第一次迭代中为 return "content"
,在第二次迭代中为 null
。
@Test
void test(@Mocked Dependency dep) {
new Expectations() {
{
dep.get();
result = "content";
times = 1;
}
};
Assertions.assertEquals("content", testSubject.doSomething(dep));
}
然而,这会导致 JMockit 抛出 Unexpected invocation to: Dependency#get()
错误。如果我删除 times
字段,我的测试将永远循环运行。
如何测试此方法?
所以我发现除了 result
参数之外,JMockit 还可以设置一个 returns(args...)
方法,我们可以向该方法传递一系列它将按顺序期望的参数。因此,将测试修改为这对我有用。
@Test
void test(@Mocked Dependency dep) {
new Expectations() {
{
dep.get();
returns("content", null);
times = 2; // limiting to mock only twice as only 2 values are provided in returns
}
};
Assertions.assertEquals("content", testSubject.doSomething(dep));
}
我正在为以下测试 class 方法编写测试。
public String doSomething(Dependency dep) {
StringBuilder content = new StringBuilder();
String response;
while ((response = dep.get()) != null) {
content.append(response);
}
return content.toString();
}
下面是我的测试用例。基本上,我希望 Dependency#get()
方法在第一次迭代中为 return "content"
,在第二次迭代中为 null
。
@Test
void test(@Mocked Dependency dep) {
new Expectations() {
{
dep.get();
result = "content";
times = 1;
}
};
Assertions.assertEquals("content", testSubject.doSomething(dep));
}
然而,这会导致 JMockit 抛出 Unexpected invocation to: Dependency#get()
错误。如果我删除 times
字段,我的测试将永远循环运行。
如何测试此方法?
所以我发现除了 result
参数之外,JMockit 还可以设置一个 returns(args...)
方法,我们可以向该方法传递一系列它将按顺序期望的参数。因此,将测试修改为这对我有用。
@Test
void test(@Mocked Dependency dep) {
new Expectations() {
{
dep.get();
returns("content", null);
times = 2; // limiting to mock only twice as only 2 values are provided in returns
}
};
Assertions.assertEquals("content", testSubject.doSomething(dep));
}