使用MvxTrace进行单元测试代码

时间:2018-02-26 16:32:38

标签: c# unit-testing xamarin xamarin.android mvvmcross

我有这段代码:

    public async Task DeleteListAsync(Models.List list)
    {
        var userList = (await _userListRepository.GetAllAsync())
            .Where(ul => ul.ListId.Equals(list.Id, StringComparison.CurrentCultureIgnoreCase))
            .FirstOrDefault();

        if (userList != null)
            await _userListRepository.DeleteAsync(userList);
        else
            MvxTrace.Error(string.Format("Unable to find UserList entry for List {0}.", list.Id));

        await _listRepository.DeleteAsync(list);
    }

我的问题是以下问题 - 如何通过调用MvxTrace(这是MvvmCross框架的一部分)对此代码进行单元测试。我知道我可以将对MvxTrace的调用包装到我自己的接口基本方法中并为单元测试目的提供自己的实现,但有没有更好/不同的方式为MvxTrace提供模拟实现而不需要包装它?

1 个答案:

答案 0 :(得分:0)

如果您使用的是Mvx 5.x或更高版本,则不应再使用 MvxTrace 并使用 IMvxLog ,然后您可以将其注入构造函数并执行单元测试更容易。





如果不是,你必须创建自己的 IMvxTrace 实现并注册它,因为你可以看到这里 Mvx 4.4 .0实现MvxTrace MvxTrace 解析 IMvxTrace ,这是静态方法最后调用的。





创建自定义 MvxTrace




 公共类MyTestableMvxTrace:IMvxTrace
 {
 //实现添加自定义标志的接口
 //或数据,以便您可以在断言
中使用它...
}
  




在测试中注册:

&#xA;&#xA; < pre> Mvx.RegisterType&lt; IMvxTrace,MyTestableMvxTrace&gt;();&#xA; &#xA;&#xA;

HIH

&#xA;