gpt4 book ai didi

java - 使用 EasyMock 和 Junit 忽略方法/void 方法

转载 作者:行者123 更新时间:2023-12-01 13:57:16 27 4
gpt4 key购买 nike

“添加了更多详细信息”

我想模拟某个 void 方法,但我不太确定如何做。我读过有关 EasyMock 的内容,但我不知道当它是一个 void 方法时该怎么办,这是我的主类;

主类

public class Main {
Updater updater = new Updater(main.getID(), main.getName(),....);

try {
updater.updateContent(dir);
}

我想模拟updater.updateContent(dir);,以便我可以跳过尝试

更新程序类

private String outD;

public void updateContent(final String outDir) throws Exception {


outD = outDir;
if (...) {
....;
}

}

... 私有(private) void 方法

这是我迄今为止的测试类(class),

public class MainTest {


@Before
public void setUp() {

}

@Test
public void testMain() {


try {


try {
Updater updater = EasyMock.createNiceMock(Updater.class);
updater.updateContent("/out");
EasyMock.expectLastCall().andThrow(new RuntimeException());

EasyMock.replay(updater);

updater.updateContent("/out");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}


}
}

(已编辑)谢谢。

最佳答案

对于返回 void 的方法,您必须以这种方式记录行为:

 Updater updater = EasyMock.createNiceMock(Updater.class);
updater.updateContent("someDir"); // invoke the easy mock proxy and
// after invoking it record the behaviour.
EasyMock.expectLastCall().andThrow(new RuntimeException()); // for example

EasyMock.replay(updater);

updater.updateContent("someDir"); // will throw the RuntimeException as recorded

期望您有以下Main

public class Main {
private Updater updater;

private int updatedContentCount; // introduced for the example

public Main(Updater updater) {
this.updater = updater;
}

public void updateContent() {
try {
updater.updateContent("/out");
updatedContentCount++;
} catch (Exception e) {
// skip for this example - normally you should handle this
}
}

public int getUpdatedContentCount() {
return updatedContentCount;
}

}

您的更新程序的 API 如下所示

public class Updater {

public void updateContent(String dir) throws Exception {
// do something
}
}

那么 Main 类的测试将如下所示:

public class MainTest {

private Updater updater;
private Main main;

@Before
public void setUp() {
updater = EasyMock.createNiceMock(Updater.class);
main = new Main(updater);
}

@Test
public void testUpdateCountOnException() throws Exception {
updater.updateContent("/out");
EasyMock.expectLastCall().andThrow(new RuntimeException());
EasyMock.replay(updater);
main.updateContent();
int updatedContentCount = main.getUpdatedContentCount();
Assert.assertEquals(
"Updated count must not have been increased on exception", 0,
updatedContentCount);
}
}

MainTest 测试在 Updater 发生异常时是否正确处理 updateCount。

关于java - 使用 EasyMock 和 Junit 忽略方法/void 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19563943/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com