【发布时间】:2014-10-26 21:15:30
【问题描述】:
这可能是一个简单的问题,但我无法缩短它。
我正在测试我的一个类,ClassToTest。在生产中,它将对第三方库对象(ThirdPartyClass 的实例)执行操作。
我想用一个存根来模仿那个类。 (使用Martin Fowler's essay 使用的存根定义:存根对测试期间的调用提供预设答案,通常根本不响应测试中编程之外的任何内容)
问题是:
-
ClassToTest有一个方法setThirdPartyClass(ThirdPartyClass o)。所以要将存根传递给它,存根必须扩展ThirdPartyClass。这意味着我的测试必须使用第三方库,而我的单元测试需要自包含。
原因是,我的代码将在嵌入式系统上运行,而有问题的库主要执行本机代码。但是我想在我的 PC 上单独开发和测试我的代码。但是我不想修改ClassUnderTest参数签名等等,比如来回切换:
classToTest.setThirdPartyClass(ThirdPartyClass o){ /*....*/ }
和
classToTest.setThirdPartyClass(MyThirdPartyClassStub o){ /*....*/ }
AFAIK,通常存根会简单地扩展它所模仿的类,因此不必更改签名(并用最少的代码覆盖构造函数等)。
这样做的好方法是什么?
【问题讨论】:
-
你能提供一个你想测试的方法的例子吗?
-
改用 Mockito 模拟。它使用字节码生成来处理这些问题,并且您将获得一个可编写脚本的替代测试。
标签: java unit-testing junit stub