【问题标题】:Mockito incorrectly injecting string valueMockito 错误地注入字符串值
【发布时间】:2020-04-21 13:25:55
【问题描述】:

我在我的测试类 testObj 中创建了一个对象,mockDao 是我模拟的一个 dao 对象。

要测试的函数类似于:

MyDao myDao;

String myFunc(String param1, String param2) {
    MyObj realObj = new MyObj("param1", "param2");
    return myDao.someFunction(realObj);
}

UnitTest 类类似于:

@Mock
MyDao mockDao;
@InjectMock
MyComponent component;

MyObj testObj = new MyObj("param1", "param2");

@Test
public void test() {
    Mockito.when(mockDao.someFunction(testObj)).thenReturn(“123”);
    String returnedValue = component.myFunc("param1","param2");
    Assert.assertEquals(returnedValue, "123");
}

这不应该在我的实际类中注入“123”,因为在实际类中创建的对象 (realObj) 与 testObj 不同。

但是,这是注入“123”,我的测试通过了。虽然理想情况下它应该失败。

这种注入怎么可能发生?

【问题讨论】:

  • 显示此类MyObj等于和哈希码在此类中被覆盖?

标签: java unit-testing testing mocking mockito


【解决方案1】:

你没有在你的模拟设置中使用任何参数匹配器,在这种情况下,Mockito 应该使用默认的:any(),它不会检查方法是如何被调用的(它在每种情况下都返回 true)。

尝试:Mockito.when(mockDao.someFunction(Mockito.eq(testObj)).thenReturn(“123”)。在这种情况下,Mockito 将使用对象的 equals 方法,在您的情况下是对象引用。

如果您需要“任何与以下内容不匹配”之类的内容,我建议您尝试查看 Mockito 的 AdditionalMatchers

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多