gpt4 book ai didi

java - 调用了构造函数中的验证方法

转载 作者:搜寻专家 更新时间:2023-11-01 02:42:58 25 4
gpt4 key购买 nike

我有一个调用方法的构造函数,如下所示:

public Foo(boolean runExtraStuff) {
if (runExtraStuff){
doExtraStuff();
}
}

doExtraStuff() 方法正在运行一些不容易自行模拟的额外命令(例如数据库检查以初始化某些变量)。也许构造函数不这样做会更好,但这是我目前必须使用的代码。

我想创建一个单元测试以确保当 boolean 值 runExtraStuff 为真时调用 doExtraStuff() 并且当 boolean 值为假时不运行。我正在使用 JMockit。

但是,我不确定如何实现这一点。通常我会在模拟对象上使用 Verifications,但由于我正在测试构造函数,所以我不能以这种方式使用模拟对象。那么如何验证构造函数中的方法是否被调用?

最佳答案

这很简单,即使它需要部分模拟:

@Test
public void runsSetupWhenRequestedOnFooInitialization()
{
// Partially mocks the class under test:
new Expectations(Foo.class) {};

final Foo foo = new Foo(true);

// Assuming "setup" is not private (if it is, use Deencapsulation.invoke):
new Verifications() {{ foo.setup(); }};
}

@Test
public void doesNotRunSetupWhenNotRequestedOnFooInitialization()
{
new Expectations(Foo.class) {};

final Foo foo = new Foo(false);

new Verifications() {{ foo.setup(); times = 0; }};
}

当然,在这种情况下最好避免模拟;相反,如果可能的话,测试应该通过 getter 或其他可用方法检查对象的状态。

关于java - 调用了构造函数中的验证方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29753464/

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