当前位置: 首页 > 知识库问答 >
问题:

为什么不触发Mockito的when()?

翟单弓
2023-03-14

我需要测试一个服务类,但是当我试图模拟dao类时,它没有被触发,因此不能使用ThenReturn()。

我认为问题是因为我在服务类(Spring MVC 3.1)中为我的Dao和@Autowired使用了一个接口:

接口:

public interface TestDao {
    int createObject(Test test) throws NamingException;
}

执行情况:

@Repository
public class TestDaoImpl implements TestDao {

    @Override
    public int createObject(Test test) {
        KeyHolder keyHolder = new GeneratedKeyHolder();
        jdbcTemplate.update(new InsertNewTest(test), keyHolder);
        return ((java.math.BigDecimal)keyHolder.getKey()).intValue();
    }
}
public class RegTest {
    @Autowired
    TestDao testDao;

    public int regTest(int .....) {
        .
        .
        int cabotageId = testDao.createObject(test);
    }
}
@RunWith(MockitoJUnitRunner.class)
public class TestRegService {
    @InjectMocks
    private RegTest regTest = new RegTest();

    @Mock
    TestDao testDao;

    @Test()
    public void test() {
        .
        when(testDao.createObject(null)).thenReturn(100);
        .
    }
testDao.createObject(any(Test.class))

成功了!

共有1个答案

华睿识
2023-03-14

如果您的测试实际上是向createObject传递一个值,那么When(testdao.createObject(null)...永远不会匹配。您可以将test的任何实例与testdao.createObject(any(test.class))...

另外,当您稍后尝试提供new Test()作为要匹配的参数时,它实际上会尝试在Test的确切实例上进行匹配,但可能您的实际代码正在新建一个不同的代码。因此,使用matchers.any(test.class)作为要匹配的参数是可行的。

 类似资料:
  • 问题内容: 我的代码中有一个。我已添加。但是它还是没有被触发。我已经尝试了很多时间,但是没有找到解决方案。 但是控制台中没有任何内容。请建议我我在做什么错。 问题答案: FocusListener不是JComboBox的适当监听器,另外一个监听器可以创建无限循环(尤其是可编辑的JComboBox), 的FocusListener是异步的,有时是太难捕捉事件是正确的订单特别是在案件JComponen

  • 我已经初始化了一个数组状态,当我更新它时,我的组件不会重新渲染。以下是一个最低限度的概念证明: 根据这段代码,似乎输入应该包含要开始的数字0,并且无论何时更改,状态也应该更改。在输入中输入“02”后,应用程序组件不会重新渲染。但是,如果我在5秒后执行的onChange函数中添加setTimeout,则表明数字确实已更新。 对为什么组件不更新有什么想法吗? 这是一个带有概念证明的代码沙盒。

  • 本文向大家介绍什么是触发器?SQL Server 2000有什么不同类型的触发器?相关面试题,主要包含被问及什么是触发器?SQL Server 2000有什么不同类型的触发器?时的应答技巧和注意事项,需要的朋友参考一下 让未来的数据库开发人员知道可用的触发器类型以及如何实现它们是非常有益的。触发器是一种专用类型的存储过程,它被捆绑到SQL Server 2000的表格或者视图上。在SQL Serv

  • 问题内容: 在下面的示例中,我无法弄清楚为什么未触发$ destroy事件。有人可以解释为什么不触发它,以及在什么情况下会触发它吗? 这是pl客:http ://plnkr.co/edit/3Fz50aNeuculWKJ22iAX?p=preview JS HTML 问题答案: 问题是您正在上监听事件,但正在上触发该事件。 来自angular.js来源(我确定它已记录在网站上的某个地方,但我没有看

  • 我试着读过类似的问题,但没有成功。

  • 问题内容: 我是Mockito的新手,我已经开始学习它。但是我有一些疑问。为什么我们需要使用Mockito?据我所知,它用于模拟(创建虚拟对象)并在具有实际运行代码之前编写测试用例。但是,如果我想测试已经实施的代码以检查它们是否正常运行,该怎么办。我如何使用Mockito进行测试? 例如,我有CRUD方法,我想通过使用我的Create方法在数据库中实际插入数据来测试Create是否正常运行,这与其