.NET工具:提取接口并实现包装类

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指出我可以使用存根,但是,如果可能的话,我想打破我的耦合.

Jaz*_*azz 8

为非密封类找到了解决方法.

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)


Ale*_*kov 3

我不知道有什么工具可以为你做到这一点。

您可能知道,但 Visual Studio 只前进了半步 - 它可以提供接口的空实现。如果这是一次性任务,我会停在那里。

根据实际目标,使用其他方法可能会起作用 - 即为了测试,您可以使用模拟框架 - 通常有一种方法可以包装现有类并根据需要重写某些方法。