相关疑难解决方法(0)

如何创建一个接口,使一些方法保持在C#中进行测试?

考虑以下课程

public class Entity {
  public void Foo() { ... }
  internal void Bar() { ... }
}
Run Code Online (Sandbox Code Playgroud)

如你所见,它有一个public方法和一个internal方法.现在,我想创建一个接口,允许我在测试中模拟这个类(在这个程序集和其他程序集中).我重写我的代码如下:

public interface IEntity {
  void Foo();
}

internal class Entity : IEntity {
  public void Foo() { ... }
  public void Bar() { ... }
}
Run Code Online (Sandbox Code Playgroud)

但是,这会产生另一个问题.当在同一个程序集中的另一个方法中使用该类时,我再也无法调用Bar:

public class OtherClass {
  public void SomeMethod(IEntity entity) {
    entity.Bar(); // error!
  }
}
Run Code Online (Sandbox Code Playgroud)

像这样重写代码:

public class OtherClass {
  public void SomeMethod(IEntity entity) {
    (entity as Entity).Bar(); // …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing interface internal

7
推荐指数
2
解决办法
6546
查看次数

标签 统计

c# ×1

interface ×1

internal ×1

unit-testing ×1