我面临一个场景,我需要在 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/