【问题标题】:Dependency service Null Reference exception in unit testing单元测试中的依赖服务空引用异常
【发布时间】:2016-10-12 12:27:44
【问题描述】:

我正在尝试将单元测试包含到我的 Xamarin PCL 项目中。

这就是我基本上在做的事情:

登录页面类:

 public bool isUserRemembered()
    {
        return DependencyService.Get<IUserDefaults>().getUserRemembered();
    }

    public void setRememberUser(bool check)
    {
        DependencyService.Get<IUserDefaults>().setUserRemembered(check);
    }

UnitTest 类(iOS):

    [Test]
    public void RememberKeyTrueTest()
    {
        LoginPage page = new LoginPage();
        bool isRemember = true;

        page.setRememberUser(isRemember);

        bool value = page.isUserRemembered();
        if (value)
            Pass();
        else
            Fail();
    }

我在这一行得到空引用异常:DependencyService.Get&lt;IUserDefaults&gt;().setUserRemembered(check)

依赖服务是否可以与单元测试一起使用?或者有什么解决办法吗?

【问题讨论】:

标签: c# unit-testing xamarin xamarin.ios


【解决方案1】:

当我在我的代码中使用依赖注入时,我使用 IoC(控制反转)来处理在我的生产代码中创建依赖项,并在我的单元测试中手动创建我的依赖项。

我这样做的主要原因是它是明确的。通常我会使用 Mocking 框架来创建假实例,所以我不想要额外的复杂性。

关于您的待测代码的建议,您已将类的依赖项交换为对 DependencyService 的依赖项。我并不是说不要使用 DependencyService,但您可以将依赖项传递给类的构造函数。然后您的测试可以传入一个假实例,而生产代码将使用 DependencyService 为您获取 IUserDefaults 并将其传入。这将使您的类更易于测试。

【讨论】:

    猜你喜欢
    • 2012-12-23
    • 1970-01-01
    • 2017-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-24
    • 2012-02-13
    相关资源
    最近更新 更多