gpt4 book ai didi

mocking - JMockIt:是否可以在同一个 TestClass 中模拟同一个类两次,以验证不同场景中的行为

转载 作者:行者123 更新时间:2023-12-02 02:16:00 25 4
gpt4 key购买 nike

我需要编写一个测试,其中可以验证一个类的行为,用于 Mocked 类的不同行为。为了支持同一方法的多种行为,我们需要在同一个 TestClass 中多次模拟该类。

是否可以使用 JMockIt?

这是我想要的示例。这是要测试的主要类及其测试:

public class MyClass {

private Foo fooObj = null;

public setfooObj(Foo obj) {
fooObj = obj;
}

public boolean process() {
// uses fooObj.getName() to process
}
}

public class MyClassTest {

@MockClass(realClass = mypackage.Foo.class)
public static class MockFoo {

@Mock
public static boolean getName() {
return "test";
}
}

@Test
public void validateProcessing() {
MyClass testObj = new MyClass();
assertEquals(false, testObj.process);
}
}

现在,当 MockFoo.getName() 返回不同的值时,我想验证 testObj.process() 方法的行为。对于我的第一个断言,我想将其值用作“测试”(由模拟函数返回),但对于以下断言,我想使用不同的值进行检查。

最佳答案

这个很容易解决,不需要mock同一个类两次。要在不同的调用中从相同的模拟方法返回不同的值,如果使用“Expectations API”,只需记录两个(或更多)连续的返回值;如果使用“Mockups API”,将类型为“Invocation inv”的第一个参数添加到您的模拟方法,然后使用“inv.getInvocationIndex()”来了解应该返回哪个值(不如其他选项好,但有效很好)。

有关更多文档和示例,请查看 JMockit 项目站点,或在完整发行版中的“jmockit/www”目录下。

关于mocking - JMockIt:是否可以在同一个 TestClass 中模拟同一个类两次,以验证不同场景中的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10593453/

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