gpt4 book ai didi

java - 如何使用 Java Mockito 执行单元测试

转载 作者:行者123 更新时间:2023-12-01 19:45:41 24 4
gpt4 key购买 nike

我正在尝试使用 mockito 测试此代码,因此需要将 结果 模拟为错误并测试代码。在本例中,我将结果硬编码为 1。

public class RetrieveData {
public int retrieveMetaData() {
int retries = 0;
int result = 0;
int MAX_RETRIES = 3;
while (retries++ < MAX_RETRIES) {
try {
result = 1;
} catch (Exception e) {
if(retries < MAX_RETRIES) {
System.out.println(" retries :" + retries );
} else {
throw e;
}
}
}
return result;
}
public static void main(String[] args) {
int result ;
RetrieveData obj = new RetrieveData();
result = obj.retrieveMetaData();
System.out.println(result);
}
}

莫基托:

import org.junit.Test;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
public class TestretrieveMetaData {

@Test
public void test_retrieveMetaData() throws Exception {
RetrieveData resultObj = mock(RetrieveData.class);

// how to add the mock for the result.

}
}

最佳答案

首先,你必须明白你想要做什么!

你看,你要么模拟类X...因为X的实例在某个类Y中使用,并且你打算测试Y。或者您打算测试类 X,但您不应该模拟 X 的实例!要么测试 X,要么使用 X 来测试其他内容。

假设您想模拟类 RetrieveData 的实例,只需执行以下操作:

RetrieveData resultObj = Mockito.mock(RetrieveData.class);
Mockito.when(resultObj.retrieveMetaData()).thenReturn(42);

因此,为了与 Tobb 的评论保持一致:您不能单独“模拟”该结果字段。如果有的话,您可以模拟类的完整实例。但正如所说:只有当您在要测试的另一个类中使用该实例时,这才有意义。

长话短说:如上所述,真正的问题是您正在尝试使用您根本不理解的概念(这里没有判断)。我的建议:首先阅读 Mockito 上的好教程。然后花了很多时间思考“我怎样才能编写可以以合理方式测试的代码”。您尝试从步骤 10 开始,但这行不通,因为您只能在之前完成步骤 1 到 9 时执行此操作,并了解它们的含义。

是的,您可以使用 Mockito spy当你想要“部分 mock ”时。使用它,您可以测试 X 的某些部分,同时也“模拟”X 的其他部分。但这确实是一项高级功能,并且很可能不是您应该首先学习的主题。

关于java - 如何使用 Java Mockito 执行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53480126/

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