UnitTest移动服务TableController

时间:2015-02-09 23:51:08

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

我目前正在尝试为移动服务.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 Method with NullReferenceException中失败了

如何初始化控制器以便我不会得到NullReferenceException?

1 个答案:

答案 0 :(得分:0)

伙计,这是一个陈旧的答案,但这应该可以解决你的问题! 我刚刚为TableControllers开发了一个通用的解决方案。

firstable你必须处理设置,这只能通过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