Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 冻结的Mock返回null,但在测试方法内部工作良好_C#_Unit Testing_Moq_Autofixture - Fatal编程技术网

C# 冻结的Mock返回null,但在测试方法内部工作良好

C# 冻结的Mock返回null,但在测试方法内部工作良好,c#,unit-testing,moq,autofixture,C#,Unit Testing,Moq,Autofixture,我正在尝试测试一个服务,该服务使用从数据库获取一些值的提供者,并在返回一些值之前在服务内部使用它。 调试测试时,模拟提供程序工作正常。但是当完整地运行测试时,提供者总是返回null 测试用例 [理论] [自动跟踪溢出数据] 公共异步任务测试服务(服务sut,[冻结]模拟providerMock) { providerMock.Setup(x=>x.GetGreeting(It.IsAny()).ReturnsAsync(“Hello开发者”); var s=providerMock.Object

我正在尝试测试一个服务,该服务使用从数据库获取一些值的提供者,并在返回一些值之前在服务内部使用它。 调试测试时,模拟提供程序工作正常。但是当完整地运行测试时,提供者总是返回null

测试用例
[理论]
[自动跟踪溢出数据]
公共异步任务测试服务(服务sut,[冻结]模拟providerMock)
{
providerMock.Setup(x=>x.GetGreeting(It.IsAny()).ReturnsAsync(“Hello开发者”);
var s=providerMock.Object.GetGreeting(123);//works返回“Hello Developer”
var greeting=sut.SayHello();
Assert.Equal(问候“Hello Developer”);
}
公共类AutoStackoverFlowData:AutoDataAttribute
{
公共AutoStackoverFlowData():此(新的AutoMoqCustomization()){}
公共AutoStackoverFlowData(参数ICCustomization[]自定义)
:base(()=>newfixture().Customize(newautomoqcustomization()){}
}
服务
公共类服务
{
专用只读IProvider提供程序
公共服务(IProvider提供者)
{
this.provider=provider;
}
公共异步任务SayHello()
{
int-someNum=123;
var temp=await subvider.GetGreeting(someNum);
返回温度;
}
}
接口
公共接口IProvider
{
任务GetGreeting(int-id);
}

使用[冻结]时,顺序很重要。始终将[冻结]变量作为测试用例中的第一个参数。这是一个简单的解决方案:

[Theory]
[AutoStackoverFlowData]
public async Task TestingService([Frozen] Mock<ISubscriptionProvider> providerMock, Service sut)
{
    providerMock.Setup(x => x.SpeedDropSoc(It.IsAny<int>())).ReturnsAsync("Hello Developer");
    var s = providerMock.Object.SpeedDropSoc(123); //works returns "Hello Developer"
    var greeting = await sut.SayHello();
    Assert.Equal("Hello Developer", greeting);
}
[理论]
[自动跟踪溢出数据]
公共异步任务测试服务([冻结]模拟providerMock,服务sut)
{
providerMock.Setup(x=>x.SpeedDropSoc(It.IsAny()).ReturnsAsync(“Hello开发者”);
var s=providerMock.Object.SpeedDropSoc(123);//works返回“Hello Developer”
var greeting=wait sut.SayHello();
Assert.Equal(“你好,开发者”,问候语);
}
public class Service
{
    private readonly IProvider provider
    public Service(IProvider provider)
    {
        this.provider= provider;
    }

    public async Task<string> SayHello()
    {
        int someNum= 123;
        var temp = await subProvider.GetGreeting(someNum);
        return temp;
    }
}
public interface IProvider
{
    Task<string> GetGreeting(int id);
}
[Theory]
[AutoStackoverFlowData]
public async Task TestingService([Frozen] Mock<ISubscriptionProvider> providerMock, Service sut)
{
    providerMock.Setup(x => x.SpeedDropSoc(It.IsAny<int>())).ReturnsAsync("Hello Developer");
    var s = providerMock.Object.SpeedDropSoc(123); //works returns "Hello Developer"
    var greeting = await sut.SayHello();
    Assert.Equal("Hello Developer", greeting);
}