【问题标题】:UnitTest Mobile Service TableControllerUnitTest 移动服务表控制器
【发布时间】:2017-01-22 02:38:38
【问题描述】:

我目前正在尝试为移动服务 .net 后端编写单元测试。

我已经使用 Effort 创建了一个模拟数据库上下文。

但我真的不知道如何初始化一个表控制器来测试它。

我尝试了这个小单元测试:

[TestClass]
public class UnitTest1
{
    private MobileServiceContext _context = null;
    private GroupController _controller = null;

    [TestInitialize]
    public void SetupTest()
    {
        DbConnection connection = Effort.DbConnectionFactory.CreateTransient();
        _context = new MobileServiceContext(connection);

        _controller = new GroupController(_context);
    }

    [TestMethod]
    public void TestGetAll()
    {
        var result = _controller.GetAccessibleGroups();
    }
}

GetAccessibleGroups 方法仍处于默认状态:

public class GroupController : TableController<Group>
{
//...
    public IQueryable<Group> GetAccessibleGroups()
    {
        return Query();
    }

但调用Query()时Get方法失败,出现NullReferenceException;

如何初始化控制器,以免收到 NullReferenceException?

【问题讨论】:

  • 可以发_controller.GetAccessibleGroups();的代码吗?
  • 当然,我将它添加到问题中。但它仍处于默认状态。
  • .NET 移动服务只是一个定制的 Web API,因此您应该能够使用如下测试技术:asp.net/web-api/overview/testing-and-debugging/…
  • 即使我遇到同样的错误,当我尝试测试扩展此表控制器的控制器时

标签: c# unit-testing asp.net-web-api2 azure-mobile-services


【解决方案1】:

伙计,这是一个旧答案,但这应该可以解决您的问题!!! 我刚刚开发了一个通用的解决方案来对 TableControllers 进行单元测试。

首先你必须处理设置,这只能通过 DomainManager 初始化 tablecontroller 来完成。

您可以在控制器中添加以下方法:

    public void SetDomainManager(EntityDomainManager<TModel> domainManager)
    {
        DomainManager = domainManager;
    }

然后在你的代码中

public class UnitTest1
{
private MobileServiceContext _context = null;
private GroupController _controller = null;

[TestInitialize]
public void SetupTest()
{
    DbConnection connection = Effort.DbConnectionFactory.CreateTransient();
    _context = new MobileServiceContext(connection);
    _controller = new GroupController();
    _controller.SetDomainManager(new EntityDomainManager<Group>(_context, _controller.Request));
}

[TestMethod]
public void TestGetAll()
{
    var result = _controller.GetAccessibleGroups();
}

}

我相信使用此代码,您应该能够对 TableController 进行单元测试。还可以观看我的通用解决方案,它更干净,可以应用于任何控制器。我会给你我的解决方案的链接:TableControllers Unit test

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 2016-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多