如何使用模拟简化我的单元测试

问题描述 投票:0回答:1

我的单元测试面临一个真正的问题。我目前正在从事一个2年的项目,并且已经编写了2个月的单元测试。由于代码的复杂性,大多数需要测试的功能会调用5到15个其他功能,并且在每个功能中,大约使用5个对象和10个参数。刚开始时,我仅使用Junit和EasyMock测试简单的基本功能,但是现在我正在使用这种类型的复杂功能,为每个测试用例设置模拟及其行为大约需要300行,这对于我。

你们有其他替代解决方案来解决此问题吗?

java unit-testing junit mocking
1个回答
0
投票

首先,请区分哪些依赖项确实困扰您。请参阅https://stackoverflow.com/a/60196328/5747415以获取使依赖项麻烦的标准列表。那些没有麻烦的依赖项不需要被嘲笑。

[其次,如果有可能,请尝试重新设计代码:将计算为主的代码(没有麻烦的依赖关系的代码)与交互为主的代码(主要处理调用其他代码的代码)分开。现在看一下可以完美实现这种分离的代码部分:在这些代码部分中,使用单元测试通过计算(可能还包括非麻烦的依赖项)对代码进行测试-显然这里不需要进行模拟。同样,该代码仅包含您将使用集成测试进行测试的交互,而无需进行模拟。

[第三,可能会保留一些代码部分,其中很难实现如此完美的分离,并且您将剩下的计算与交互混合在一起。在这里,您可能需要对单元进行双打测试。对于这些情况,还有一些重新设计策略可以减少模拟工作。例如,集中访问辅助方法中的某些依赖项(例如,执行获取,认证和解压缩某些数据的工作的辅助方法):经过这样的重新设计,而不必模拟多个依赖项(相同的示例:到数据库,身份验证库,压缩库),您只需模拟您的助手功能。

此策略可以节省您创建双打的大量精力。

© www.soinside.com 2019 - 2024. All rights reserved.