gpt4 book ai didi

java - 为什么mock方法总是正确的?

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

我在 spock 框架中编写了一些单元测试。但我的测试总是正确的,即使我传递了错误的值。

class CalculatorTest extends Specification  {

def "Method should return roman number"() {
given:
CalculatorApi romanCalculator = Mock()
when: "I add two numbers as integer"
romanCalculator.add(2, 2)
then: "Method should return roman number as String"
romanCalculator.add(2, 2) >> 32131
}

方法“add”应该返回字符串。在此测试中,方法应返回 Integer。

public class RomanCalculator implements CalculatorApi {

private RomanConverter romanConverter;

public RomanCalculator() {
this.romanConverter = new RomanConverter();
}

public String add(int one, int two) throws OperationFail {
int number = one + two;

try {
return romanConverter.convertNumber(number);
} catch (NumberNotFound e) {
throw new OperationFail(e.getMessage());
}
}


public class RomanConverter implements ConverterApi {

public String convertNumber(Integer number) throws NumberNotFound {

switch(number) {
case 1:
return "I";
case 2:
return "II";
case 3:
return "III";
case 4:
return "IV";
case 5:
return "V";
case 6:
return "VI";
case 7:
return "VII";
case 8:
return "VIII";
case 9:
return "IX";
case 10:
return "X";
default:
throw new NumberNotFound();
}
}

为什么这个方法不起作用?我刚刚开始使用模拟学习单元测试。

最佳答案

问题是:为什么你应该 mock ? Mock 用于确保不存在其他依赖关系,以便测试特定方法。可以模拟所有外部依赖项以避免出现问题(例如数据库连接:您想要测试使用从数据库检索的数据的逻辑,因此您想要模拟正在执行数据库请求的对象)。另外,请添加您正在使用的模拟库的详细信息。

这里你说如果你用参数(2,2)调用你的方法,它将返回罗马计算器(2,2)的执行,这是错误的。你在这里不是测试,Mock不是用来测试你想要测试的类,而是用来简化其他对象并在安全可控的环境中测试你的方法。示例:

Instance retrieve = new Instance()

method doSomething() {
retrievedVal = retrieve.retrieveFromDB(something)
return transform(retrievedVal)
}

你的测试应该是:

test() {
Instance retrieve = mock()
when retrieve(specific something).thenReturn(specificRetrievedVal)

test doSomething()
}

我避免使用完整且完整的示例,以便您可以了解您到底需要如何做并尝试:)

关于java - 为什么mock方法总是正确的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27962966/

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