我目前正在尝试为移动服务.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?
答案 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