如何在模拟方法中对函数进行单元测试

somecoolname

我如何在这里测试DeleteAppointmentById?

 Func<IDataAdapterRW, IEnumerable<uint>> function = db =>   DeleteAppointmentById(db, appointmentId);

 return _dataContextProvider.GetContextRW().Run(function);

_dataContextProvider已用最小起订量来模拟。如果我运行测试,则它永远不会输入DeleteAppointmentById

测试方法:

public IEnumerable<uint> DeleteAppointment(uint appointmentId)
    {
        Func<IDataAdapterRW, IEnumerable<uint>> function = db => DeleteAppointmentById(db, appointmentId);
        return _dataContextProvider.GetContextRW().Run(function);
    }

DeleteAppointmentById是我真正感兴趣的内部方法(私有)。

我的测试:

[Test]
    public void DeleteAppointment_Valid_DeletedRecordId()
    {
        //Setup
        var dbContextMock = new Mock<IDataContextProvider>();
        var dataAdapterMock = new Mock<IDataContext<IDataAdapterRW>>();

        dbContextMock.Setup(d => d.GetContextRW())
            .Returns(dataAdapterMock.Object);

        dataAdapterMock.Setup(a => a.Run(It.IsAny<Action<IDataAdapterRW>>()));
        var calendarService = new CalendarService(dbContextMock.Object);

        //Run
        var result = calendarService.DeleteAppointment(1);

        //Assert
        Assert.AreEqual(1, result);
    }
脱水

您可以访问结果中的Func传递作为参数Run的方法,并断言像下面的结果。

为什么要返回结果?因为这是一个模拟并且不知道 Run方法的行为

[Test]
public void DeleteAppointment_Valid_DeletedRecordId()
{
    //Setup
    var dbContextMock = new Mock<IDataContextProvider>();
    var dataAdapterMock = new Mock<IDataContext<IDataAdapterRW>>();

    dbContextMock.Setup(d => d.GetContextRW())
        .Returns(dataAdapterMock.Object);

    dataAdapterMock.Setup(a => a.Run(It.IsAny<Func<IDataAdapterRW, IEnumerable<uint>>>()))
                   .Returns((Func<IDataAdapterRW, IEnumerable<uint>> func) => { return func(dataAdapterMock.Object);}); // configure the mock to return the list
    var calendarService = new CalendarService(dbContextMock.Object);

    //Run
    int id = 1;
    var result = calendarService.DeleteAppointment(id);

    //Assert
    var isInList = result.Contains(id); // verify the result if contains the
    Assert.AreEqual(isInList, true);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Service构造函数中对Controller和模拟@InjectModel进行单元测试

如何在类方法中模拟python的datetime.now()进行单元测试?

如何在Angular中模拟父类方法进行单元测试?

如何在异步单元测试中模拟方法?

如何在单元测试中模拟方法的结果?

如何在Swift中对抛出函数进行单元测试?

如何在python中对递归函数进行单元测试?

如何对__init __()函数中调用的方法进行单元测试?

如何在python中对POST方法进行单元测试?

如何使用Mockito模拟静态方法以进行单元测试

模拟服务中的方法进行单元测试

如何在角度单元测试中模拟函数中的服务调用?

如何在django-rest-framework中模拟出APIView上的属性以进行单元测试

您如何在C#中模拟文件系统以进行单元测试?

如何在Express中模拟中间件以跳过身份验证以进行单元测试?

如何在控制器建议中模拟服务以进行单元测试

如何在Go lang中模拟exec.Command进行多个单元测试?

如何在Angular 8中使用对象模拟数组数据以进行单元测试

如何在 node.js 单元测试中模拟构造函数调用?

如何在Angular单元测试中模拟/监视导入的函数

如何模拟HttpClientBuilder进行单元测试

如何在AngularJS单元测试中模拟诺言的结果?

如何在Python单元测试中模拟__version__

如何在Perl单元测试中重用模拟对象?

如何在单元测试中模拟springSecurityService

如何在Python单元测试中模拟类?

如何在角单元测试中模拟ControlContainer?

如何在Mockito的单元测试中模拟LocalCache

如何在Angular单元测试中模拟/触发$ routeChangeSuccess?