实际上,我有两个问题,尽管有些相关:
我知道单元测试应该测试公共API。但是,如果我有一个close方法来关闭套接字并关闭执行程序,但是,套接字和执行程序都不会暴露给该API的用户,我应该测试是否已完成,或者仅测试该方法是否正确执行?公开的api /行为和隐含细节之间的界线在哪里?
如果我测试执行某种检查的方法,然后在执行程序服务上将任务排队,然后返回将来以监视操作进度,那么即使我自己测试此方法和任务,即使任务本身是私有方法还是不公开代码?或者我应该只测试公共方法,而是通过模拟执行程序安排任务在同一线程中执行?在后一种情况下,使用execute()方法将任务提交给执行者的事实将是实现细节,但是测试将等待任务完成才能检查该方法及其异步部分是否正常工作。
答案 0 :(得分:1)
您应该问自己的唯一问题是:在不频繁执行这些测试的情况下,我或我的同事能够自信地更改代码。如果答案是否定的,请编写并维护测试,因为它们可以提供价值。
考虑到这一点,您可以考虑重构代码,以使“低级管道”(例如套接字和线程管理)位于单独的模块中,您可以将其明确视为模块提供的合同的一部分。