c# - 如何在不依赖注入(inject)的情况下模拟我们正在 C# 中测试的同一类的另一个方法

标签 c# .net unit-testing automation moq

我面临一个场景,我需要在 C# 中模拟同一类的另一个方法。但我面临着模拟另一种方法的问题,以及我在下面分享的相同方法。

 Interface --> 

  public interface IFetch
  {
     string GetColorCodes();

     string FetchData();

  }

  Class-->
 public class Fetch : IFetch 
 {

    public Fetch()
    {
     //I dont have any dependency injection
    }

   public string GetColorCodes() {
    return "Yellow";
   }

   public string FetchData(){
   string  color= GetColorCodes();
   return color;
 }

现在,在创建用于测试 FetchData() 方法的单元测试时,我不希望它在内部调用 GetColorCodes() 方法并返回“黄色”。我想返回一些其他颜色,例如“红色”。 由于没有依赖关系并且方法位于同一个类中,因此我无法找到方法。如果有人有想法,请分享此示例代码

[TestFixture]
class FetchTest 
{
   [Test]
   public void FetchDataTest()
  {
   Fetch obj=new Fetch();
   string color= obj.FetchData();
  Assert.IsEquals(color,"Red")
  }

}

I want to mock the GetColorCodes() method from the test to Return Red color.

最佳答案

如果将 GetColorCodes() 设为虚拟没有问题,则可以使用 Extract and Override测试模式。在您的测试中,使用您希望使用的模拟值新建 FetchStub,并从同一实例调用测试下的 FetchData 方法:

public class FetchStub : Fetch
{
    private readonly string _colorCode;
    public FetchStub(string colorCode)
    {
        _colorCode = colorCode;     
    }

    public override string GetColorCodes()
    {
        return _colorCode;
    }
}


public class Fetch
{

    public Fetch()
    {
        //I dont have any dependency injection
    }

    public virtual string GetColorCodes()
    {
        return "Yellow";
    }

    public string FetchData()
    {
        string color = GetColorCodes();
        return color;
    }
}

关于c# - 如何在不依赖注入(inject)的情况下模拟我们正在 C# 中测试的同一类的另一个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58849782/

相关文章:

c# - MySqlCommand.ExecuteScalar() 不返回任何内容

unit-testing - Angular + karma : Testing async functions

c# - 如何在 C# 中编写代表性别男性的符号

.net - svcutil.exe - 生成的代理不允许为空字段

c# - Entity Framework Code First 0 到 1 映射

.net - 是否可以将 Reflection.Emit 用于操作码 stelem.any 和 ldelem.any?

javascript - 除非先前定义,否则嵌套 Jest 模拟失败

ios - 为什么 Xcode 7 在根本没有单元测试的情况下显示大约 12% 的代码覆盖率?

c# - 如何使用 C# 创建浏览器插件?

c# - 工作实现单元