题
我相信你一定熟悉这个成语,有点Java的借口封锁
的//In the "Resource Manager" class
public void process(Command cmd){
//Initialize
ExpensiveResource resource = new ExpensiveResource();
//Use
cmd.execute(resource);
//Release / Close
resource.close();
}
//In the Client class...
manager.process(new Command(){
public void execute(ExpensiveResource res){
//Do things with the resource
}
});
我最近href="https://stackoverflow.com/questions/1143586/in-need-of-refactoring-in-order-to-improve-testability">用这个成语/图案了很多,但我,它是让我头疼......
你如何在隔离测试的ResourceManager和客户端类?我发现,这种紧耦合他们这么多,你不能轻易地做到这一点。
思想赞赏。
此致
解决方案
如果您不想让匿名类型真正的类型,你可以测试,考虑其execute()函数的代码移动到您可以测试其他功能。然后匿名类型变为谦虚对象( http://xunitpatterns.com/Humble%20Object.html一>)。
修改的,但你应该继续寻找方式在匿名函数来测试代码。
在如C#类型安全语言,这可以通过具有匿名代码调用虚拟成员函数来完成。该测试通过重写虚拟函数调用专业的类,检查它被称为
在如Javascript一个nontypesafe语言,称为成员函数是已经虚拟的。因此,而不是创建派生类型,可以与记录的版本覆写称为成员函数。
其他提示
我觉得匿名类应该小而简单,使用起来应该足够好测试结构,包括/。
如果你有什么事情那么复杂,大的,重要的是你觉得需要测试它使一个完整的类。
不要使用匿名内部类很多(如果有的话)。除了是难以测试,它们几乎不可能没有复制和粘贴重用。
大部分的时间,使他们充满类允许更大的灵活性,并提高您的面向对象设计(增加更多的类几乎总是提高了您的设计)。
顺便说一句,你所说的倒闭也有同样的问题 - 很难重用
不隶属于 StackOverflow