依赖服务单元测试中的空引用异常

时间:2016-10-12 12:27:44

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

我正在尝试将单元测试包含在我的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();
    }

我在这一行得到Null Reference Exception:DependencyService.Get<IUserDefaults>().setUserRemembered(check)

依赖服务是否适用于单元测试?或者有任何工作吗?

1 个答案:

答案 0 :(得分:1)

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

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

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