gpt4 book ai didi

java - 模拟具有不同值的一种方法

转载 作者:行者123 更新时间:2023-12-02 04:50:56 24 4
gpt4 key购买 nike

我在使用 Mockito 时仍然遇到一些困难。我想要两个不同的对象示例的两个测试用例。所以我想根据参数值模拟不同的方法行为。

问题是,当我运行 test() 方法时,help valiable 的返回值为“b”,并且断言不返回 true。如果我注释标记为 (***) 的行,则一切正常。

如您所见,我尝试使用 thenAnswer 而不是 thenReturn,但结果是相同的。

public class TestItAll {
TestClass test;

HelpClass a ;
HelpClass b;

@Before
public void init(){

a = new HelpClass("a");
b = new HelpClass("b");

Mockito.when(test.getHelp(a)).thenReturn("a");
/*Mockito.when(test.getHelp(a)).thenAnswer(
new Answer< String>() {
public String answer(InvocationOnMock invocation) {
return "a";
}
}); */
Mockito.when(test.getHelp(b)).thenReturn("b");//(***)

/*Mockito.when(test.getHelp(b)).thenAnswer(
new Answer< String>() {
public String answer(InvocationOnMock invocation) {
return "b";
}
}); */
}


@Test
public void testA(){
String help= test.getHelp(a);
Assert.assertEquals(help, "a");
}

/*@Test
public void testB(){
String help= test.getHelp(b);
Assert.assertEquals(help, "b");
}*/
}

请不要问我为什么要 mock 测试对象。这只是更复杂情况的一个模型示例。

最佳答案

首先,我假设您的声明 TestClass test; 实际上是 TestClass test = mock(TestClass.class);,否则 @Before code> 方法抛出 NullPointerException

当使用when(test.getHelp(a))时,mockito会使用aequals方法来检查参数是否匹配。如果例如equals 方法始终返回 true,它无法区分 ab。我已经使用覆盖 equals 方法运行您的代码(即 HelpClass 对象仅当它们是同一实例时才相等)并且两个测试都已通过。

您可能需要使用参数匹配器 - when(test.getHelp(argThat(sameInstance(a)))) 来不依赖您的 equals 方法。如果您需要比 sameInstance 更复杂的东西,我会推荐 shazamcrest 中的 sameBeanAs 匹配器。 .

关于java - 模拟具有不同值的一种方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29256358/

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