gpt4 book ai didi

java - 测试中的部分模拟类

转载 作者:行者123 更新时间:2023-12-01 11:36:33 26 4
gpt4 key购买 nike

我正在寻找模拟支持类的静态方法,为了做到这一点,我需要使用 jMockit 模拟被测类的方法。在下面的示例中,我想要模拟 canContinue 方法,以便始终进入 if 条件。我也不想模拟静态方法并验证之后发生的所有事情。

public class UnitToTest {

public void execute() {

Foo foo = //
Bar bar = //

if (canContinue(foo, bar)) {
Support.runStaticMethod(f);
// Do other stuff here that I would like to verify
}
}

public boolean canContinue(Foo f, Bar b) {
//Logic which returns boolean
}
}

我的测试方法如下所示:

@Test
public void testExecuteMethod() {

// I would expect any invocations of the canContinue method to
// always return true for the duration of the test
new NonStrictExpectations(classToTest) {{
invoke(classToTest, "canContinue" , new Foo(), new Bar());
result = true;
}};

// I would assume that all invocations of the static method
// runStaticMethod return true for the duration of the test
new NonStrictExpectations(Support.class) {{
Support.runStaticMethod(new Foo());
result = true;
}};

new UnitToTest().execute();

//Verify change in state after running execute() method
}

我在这里做错了什么?将 canContinue 方法的第一个期望更改为返回 false 不会影响代码的执行是否进入 if 条件。

最佳答案

您正在模拟一个实例 (classToTest),然后执行另一个实例 (new UnitToTest().execute()),这是不是 mock ;这是错误的一件事。

此外,测试不应使用 invoke(..."canContinue"...),因为 canContinue 方法是 public >。但实际上,这种方法根本不应该被 mock ;测试应该准备所需的任何状态,以便 canContinue(foo, bar) 返回所需的值。

关于java - 测试中的部分模拟类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29922769/

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