gpt4 book ai didi

java - 为什么我的mockito代码调用真实代码?

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

我正在使用mockito在intellij中用java编写测试。我正在尝试使用mockito来模拟api请求,但它似乎仍然在调用真正的代码,而不是使用从 sendRequest 返回的数据,导致我的测试失败。为什么是这样?这是代码:

public String sendRequest(){
return "1\n" +
"2\n" +
"3";
}

@Test
public void calculateWeatherCorrectly() throws IOException {
try {
WeatherCalculator weatherCalculator = mock(WeatherCalculator.class);
when(weatherCalculator.sendWeatherRequest("London", "01-01-2020")).thenReturn(sendRequest());
assertThat(midDayWeather("London", "12-01-2020"), equalTo(1.15));
} catch (IOException e) {
e.printStackTrace();
}
}

这是正在测试的方法的较小版本:

public static Double midDayWeather(String place, String date)
throws IOException {

WeatherCalculator weatherCalculator = new WeatherCalculator();
String l = weatherCalculator.sendWeatherRequest(place, date);
String[] result = l.split("\n");
return result.length;
}

最佳答案

您已经使用 mock() 方法创建了一个模拟对象并正确设置了它。但是,您没有在任何地方使用 WeatherCalculator 对象。您的方法 midDayWeather() 是静态的,不会使用在测试方法中创建的模拟 WeatherCalculator 对象。事实上,您的 midDayWeather() 方法创建了自己的 WeatherCalculator 对象(未模拟)并使用它。

如果您的静态 midDayWeather() 方法应该与您的模拟方法一起使用,您必须将其作为参数传递。所以你的方法应该看起来像这样:

public static Double midDayWeather(WeatherCalculator calculator,
String place, String date) throws IOException
{
calculator.sendWeatherRequest(...);
}

然后您可以将模拟对象作为参数传递。

关于java - 为什么我的mockito代码调用真实代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61018196/

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