【问题标题】:unit testing asynchronous code and code without externally visible effects单元测试异步代码和没有外部可见效果的代码
【发布时间】:2018-10-28 17:21:59
【问题描述】:

其实我有两个问题,虽然有点相关:

  • 我知道单元测试应该测试公共 API。但是,如果我有一个关闭套接字并关闭执行程序的 close 方法,但是,套接字和执行程序都不会暴露给这个 API 的用户,我应该测试这是否完成,还是只测试该方法没有错误地执行?公共 api/行为和 impl 细节之间的界限在哪里?

  • 1234563私有方法或其他未公开的代码?或者我应该只测试公共方法,而是通过模拟执行程序来安排任务在同一个线程中执行?在后一种情况下,使用 execute() 方法将任务提交给执行程序这一事实将是一个实现细节,但测试将等待任务完成才能检查该方法及其异步部分是否正常工作。

【问题讨论】:

    标签: java multithreading asynchronous testing


    【解决方案1】:

    您应该问自己的唯一问题是:如果不经常执行这些测试,我或我的同事是否能够自信地更改代码。如果答案是否定的 - 编写并维护测试,因为它们提供了价值。

    考虑到这一点,您可以考虑重构您的代码,以便“低级管道”(例如套接字和线程管理)存在于一个单独的模块中,您可以将其明确视为模块提供的合同的一部分。

    【讨论】:

    • 不确定这样重构是否可行。我已经将执行程序服务用于线程管理,因此它们确实可以被替换/模拟,并且我正在模拟套接字以测试例如连接方法是否正确调用具有正确参数的绑定。然而重构以使其暴露,不确定。
    猜你喜欢
    • 2014-09-29
    • 2016-02-23
    • 1970-01-01
    • 2010-11-19
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    相关资源
    最近更新 更多