为什么单元测试使用mstest命令行失败但在VS2010 Professional中没有?

时间:2012-10-12 12:32:47

标签: asp.net-mvc-3 unit-testing

我对asp.net mvc3应用程序的UnitTests有一点问题。

如果我在Visual Studio 2010 专业版中运行某些单元测试,则它们已成功通过。

如果我使用Visual Studio 2010 Professional命令行

mstest /testcontainer:MyDLL.dll /detail:errormessage /resultsfile:"D:\A Folder\res.trx"

然后发生了错误:

[errormessage] = Test method MyDLL.AController.IndexTest threw exception:
System.NullReferenceException: Object reference not set to an instance of an object.

我的控制器

public ActionResult Index(){
   RedirectToAction("AnotherView");
}

并在测试

AController myController = new AController();
var result = (RedirectToRouteResult)myController.Index();

Assert.AreEqual("AnotherView", result.RouteValues["action"]);

如何在两种情况下(VS2010和mstest.exe)解决此问题?

谢谢

PS:我读过Test run errors with MSTest in VS2010但如果我有VS2010 Ultimate / Premium可以解决这个问题。

1 个答案:

答案 0 :(得分:0)

我发现了问题。问题是AnotherView行动。

行动AnotherView包含

private AModel _aModel;

public ActionResult AnotherView(){
  // call here the function which connect to a model and this connect to a DB

  _aModel.GetList();
  return View("AnotherView", _aModel);
}

需要做什么:

1.使用类似

的参数创建控制器构造函数
public AController(AModel model){
  _aModel = model;
}

2.在测试或单元测试类中,创建一个类似

的模拟
public class MockClass: AModel
{

  public bool GetList(){  //overload this method
     return true;
  }

  // put another function(s) which use(s) another connection to DB
}

3.在当前测试方法IndexTest

[TestMethod]
public void IndexTest(){
   AController myController = new AController(new MockClass());
   var result = (RedirectToRouteResult)myController.Index();

   Assert.AreEqual("AnotherView", result.RouteValues["action"]);
}

现在单元测试将起作用。不适用于集成测试。在那里,您必须提供与DB的连接的配置,并且不应用模拟,只需使用我的问题中的代码。

希望在研究5-6小时后获得此帮助:)