public class LogAnalyzerUsingFactoryMethodOld{ public String IsValidLogFileName(StringfileName){ //下面就是对外部类的依赖 ExtensionManager myManager=new ExtensionManager(); //如果isValid的机制变化,则对IsValidLogFileName的测试可能失败 //这就是依赖 return myManager.isValid(fileName); }}
public class StubExtensionManager implements IExtensionManager{ public String ShouldExtensionBevalid ; public String isValid(String filename) { return ShouldExtensionBevalid; }
复制代码
}
复制代码
这个外部类可以依据测试的需要来返回任意结果,同样实现了IExtensionManager 接口。
接口的定义也很简单,如下代码。
public interface IExtensionManager { String isValid(String filename); }
复制代码
最后我们看看测试的代码。代码是用groovy实现的,使用了Spock测试框架。
class LogAnalyzerTestsOverride extends Specification{ def 'test override'(){ //定义了测试所需的自己的外部类 StubExtensionManager stub = new StubExtensionManager() stub.ShouldExtensionBevalid = "Stub Extension Manager" //实例化一个被测试类,并将外部类传入 TestableLogAnalyzer logan = new TestableLogAnalyzer() logan.Manager = stub given: def result = logan.isValidLogFileName("file.ext") expect: //测试结果判定为在外部类中设定的结果 result == "Stub Extension Manager" } }