可以修改源代码以使单元测试工作吗?

Is it ok to modify the source to make unit tests work?

我想对一种方法进行单元测试,一种检查三张牌之间是否匹配的方法。因为卡片是随机生成的,所以无法设置三张我知道匹配或不匹配的卡片。我需要这样做来对我的 isMatch() 方法进行单元测试。

是否可以更改我的卡片 class 以添加一种方法来显式设置其值以便我可以对其进行单元测试?一般来说,对源代码进行少量添加以使单元测试成为可能是可以接受的,还是有更好或更正确的方法来做到这一点?

没有。你不应该为你的单元测试修改你的代码,然后再修改回来,所以 "the code runs"。对于所描述的问题,您有 @Before。围绕这个设计你的类。构建三个确定性卡片并比较它们。使用此注释,您可以在没有 "modifying your code for unit testing".

的情况下测试代码的功能

不知道你的设置是什么,但为什么不让卡片生成器成为你的 class 和 fake 保证 [=19] 的 class 的可插入组件=] 三张匹配的卡片?

然后您可以 fake 一张 class 保证 return 三张不匹配的牌。