【发布时间】:2016-06-21 14:23:16
【问题描述】:
我在尝试使用外部 API 测试 Class 时遇到问题 -
Jama 软件
。
假设有一个ClassA。它有 2 种方法,我想使用 JUnit 进行测试。
这两种方法都有ClassB 作为参数。
ClassB 属于另一个 API。我可以看到它的方法,但没有实现细节。(compiled code)。问题是:如何模拟这些类以使 TestClass 隔离?我知道在Mockito 中有hardcode 响应的选项。是否有任何更好/更清洁 的方法可以做到这一点,所以我不需要手动配置模拟对象?如果您提供有关该主题的任何建议,我将不胜感激。
【问题讨论】:
-
最干净的解决方案是实例化/获取第三方类的有效对象,并在测试中使用它们。不要嘲笑他们,除非你遇到了一些技术难题,如果没有嘲笑就无法令人满意地解决。相信我(10 年的经验),嘲笑最好留给特殊情况。
-
所以基本上我们不能在这种情况下隔离我们的测试?像我们通常在项目中那样使用 3 方软件?
-
除非您进行集成测试,否则如果 B 类对象,我不会使用真实对象 - 特别是如果您没有源代码。你不想测试classB - 你想测试你的classA。硬编码响应是您想要定义的测试配置来测试您的课程。如果它很难配置模拟 - 如果它做得太多或违反 demeter 法则,我会看看该方法。
-
所以我有 3 个 pardy 类及其接口,我不知道它的实现。为了隔离测试,我可以模拟这个类,并且需要手动配置它来设置每个方法应该返回的东西。如果我想实现隔离,我无法避免这项工作。我很困惑,因为有一些方法可以模拟数据库而不是在真实数据库上操作,这就是我试图确定是否有任何简单的方法来配置它。
-
您能否提供一些信息,违规类是做什么的?选择何时模拟、何时使用真实对象或何时编写假对象在很大程度上取决于手头的任务。特别是数据存储可能是伪造而不是模拟的条件,而模拟在模拟异常行为方面具有优势。
标签: java unit-testing junit mocking mockito