Unit testing 作为包装器的静态方法

Unit testing 作为包装器的静态方法,unit-testing,static,Unit Testing,Static,如果您有一个名为MyClass的类,它有一组公共方法;方法A、方法B和方法C。在应用程序的某些位置,您只需要MyClass中的一个方法,例如: MyClass myClass = new MyClass(); myClass.MethodA(); 为了简化上面的内容,我想创建一个静态方法来包装上面的代码行。我计划针对MethodA编写单元测试。在我的单元测试方法中,a与使用模拟框架实现的接口交互(我认为这称为控制反转) 可以安全地假设,通过测试MethodA,静态方法(包装器方法)也被间接测试

如果您有一个名为MyClass的类,它有一组公共方法;方法A、方法B和方法C。在应用程序的某些位置,您只需要MyClass中的一个方法,例如:

MyClass myClass = new MyClass();
myClass.MethodA();
为了简化上面的内容,我想创建一个静态方法来包装上面的代码行。我计划针对MethodA编写单元测试。在我的单元测试方法中,a与使用模拟框架实现的接口交互(我认为这称为控制反转)

可以安全地假设,通过测试MethodA,静态方法(包装器方法)也被间接测试。我假设MethodA中使用的接口的实际实现也正在测试中


或者我不应该实现静态方法吗?

不,假设包装器方法也在测试中是不安全的。包装器方法中有代码,该代码可能有缺陷,因此您还需要针对该代码编写单元测试。

请不要这样做

像您想做的那样使用的静态方法与控制反转/依赖注入完全相反,因此是一种糟糕的做法。 您要做的是将接口注入到所有需要
MyClass
接口的类中(可以通过构造函数或setter手动注入,也可以使用类似Spring的IoC框架)

如果将代码行包装在从另一个类调用的静态方法中,则会将
MyClass
的特定实现耦合得太紧,这与您想要实现的相反

但是为了回答您更具体的问题,假设代码被另一个测试测试是不安全的,除非它实际上是。我的意思是:如果没有通过静态方法的测试,那么它就没有被覆盖。即使您认为它很琐碎,也不要忘记它以后可能会被重构,并且没有测试会表明它已损坏