如果你有一个名为MyClass的类,它带有一组公共方法; MethodA,MethodB和MethodC。在应用程序的某些位置,您只需要MyClass中的一个方法,例如:
MyClass myClass = new MyClass();
myClass.MethodA();
为简化上述内容,我想创建一个包含上述编码行的静态方法。我打算针对MethodA编写单元测试。在我的单元测试中,MethodA与使用模拟框架实现的接口交互(我认为这称为控制反转)。
通过测试MethodA可以安全地假设静态方法(包装器方法)也在间接测试。我假设MethodA中使用的接口的实际实现也正在测试中。
或者我应该不实现静态方法?
答案 0 :(得分:0)
不,假设包装方法也在测试中是不安全的。包装器方法中有代码,并且该代码可能有缺陷,因此您还需要针对该代码编写单元测试。
答案 1 :(得分:0)
请不要那样做!
您想要使用的静态方法与控制/依赖注入的反转完全相反,因此,这是一种不好的做法。
你想要做的是注入所有需要MyClass
接口的类(通过构造函数或setter注入,手动或使用像Spring这样的IoC框架)。
如果将代码行包装在从另一个类调用的静态方法中,那么你将把MyClass
的具体实现过于紧密,这与你想要实现的相反。 / p>
但是为了回答你更具体的问题,假设代码是通过另一个测试进行测试的,永远不会安全,除非实际上是。我的意思是:如果没有通过静态方法的测试,那么它就不会被覆盖。即使你认为它是微不足道的,也不要忘记它可能会在以后被重构,并且没有任何测试表明它已被破坏。