gpt4 book ai didi

unit-testing - 如何在单元测试中使用 mockist 方法避免误报?

转载 作者:行者123 更新时间:2023-12-04 05:15:09 24 4
gpt4 key购买 nike

由于最近我的应用程序域的数据结构变得相当复杂,我开始阅读模拟对象。很快我想到了一个简单的问题,但到目前为止,答案已被证明是相当头疼的。所以这里是:

我们有一个类“Foo”,其中一个方法是“bar”:

class Foo {
public String bar(int i){
if(i == 1) return "arrr!";
}
}

我们有一个 Pirate 类调用 Foo.bar(1);在其中一种方法中:

class Pirate {
public String yell(){
Foo foo = new Foo();
return foo.bar(1);
}

现在我们在 Pirate 类的单元测试中模拟 Foo 类,因为 Foo 恰好有过多的其他依赖项:

@Test
public void returnsPirateString() {
Pirate blackBeard = new Pirate();
Foo fooMock = mock(Foo.class);
fooMock.expectAndReturn("bar",1,"arrr!"); //expects 'bar' function to be called once and returns "arrr!"
assertEquals(blackBeard.yell(),"arrr!");
}

现在发生的情况是,如果我们重构方法 bar 以返回 null 而不是“arrr!”,我们的测试将继续愉快地运行,而我们的程序不会按我们希望的方式运行。这可能会导致调试噩梦。

使用 mockist 方法而不是经典测试方法进行单元测试,大多数时候所有“帮助”对象都被模拟,只有被测试的对象保持未模拟,因此前面提到的问题也经常发生。

在模拟时可以做些什么来防止这个问题?

最佳答案

在您的测试中,您正在测试使用 Foo 的 Pirate 类的 yell() 方法。所以你必须模拟 Foo 的 bar 方法的行为。为确保您的 bar 方法正常运行,您需要另一个测试用例来测试 Foo 的 bar 方法。

@Test
public void testBar() {
//make sure bar retrun "arrr"!
}

现在,如果您的 bar 方法返回 null,则此测试用例将失败!

关于unit-testing - 如何在单元测试中使用 mockist 方法避免误报?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3831400/

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