6 c# unit-testing interface wrapper
是否有可以为现有类生成提取和生成接口的工具?
我知道Visual Studio将为现有类提取接口.但是,我还想生成一个实现该功能的包装类.
我相信这对单元测试非常有帮助.
示例现有类:
public class ThirdPartyClass
{
public void Method1(){}
public void Method2(){}
}
Run Code Online (Sandbox Code Playgroud)
这可以由Visual Studio(Extract Interface)生成:
public interface IThirdPartyClass
{
void Method1();
void Method2();
}
Run Code Online (Sandbox Code Playgroud)
我想更进一步:
public class ThirdPartyClassWrapper : IThirdPartyClass
{
private tpc = new ThirdPartyClass();
public void Method1()
{
tpc.Method1();
}
public void Method2()
{
tpc.Method2();
}
}
Run Code Online (Sandbox Code Playgroud)
更新:
这对静态类特别有用.正如Morten指出我可以使用存根,但是,如果可能的话,我想打破我的耦合.
为非密封类找到了解决方法.
1 - 从外部类继承
class MyWrapper : ExternalClass
Run Code Online (Sandbox Code Playgroud)
2 - 提取所有公共方法的界面
class MyWrapper : ExternalClass, IExternalClass
Run Code Online (Sandbox Code Playgroud)
3 - 从外部类中删除继承
class MyWrapper : IExternalClass
Run Code Online (Sandbox Code Playgroud)
4 - 您将从未实现的接口获得有关成员的类名称的提示.按住Alt + Enter并让Resharper自动实现它们
5 - 使用此代码模板来包装属性
get { return $INNERCOMPONENT$.$NAME$; }
set { $INNERCOMPONENT$.$NAME$ = value; }
Run Code Online (Sandbox Code Playgroud)
6 - 使用此代码模板来包装方法
return $INNERCOMPONENT$.$NAME$($SIGNATURE$);
Run Code Online (Sandbox Code Playgroud)
我不知道有什么工具可以为你做到这一点。
您可能知道,但 Visual Studio 只前进了半步 - 它可以提供接口的空实现。如果这是一次性任务,我会停在那里。
根据实际目标,使用其他方法可能会起作用 - 即为了测试,您可以使用模拟框架 - 通常有一种方法可以包装现有类并根据需要重写某些方法。