【发布时间】:2010-12-13 13:54:41
【问题描述】:
我有一个名为 NewsController 的控制器,这个控制器的构造函数接收一个 INewsService 作为参数。
我在这个控制器中有一个名为 GetAllNews() 的方法,它返回我用来填充 YUI 数据表的 JSON 结果。我想编写一个单元测试来检查是否调用了新闻服务的 FindAll 方法来返回所有新闻项目。我该怎么做?我目前拥有的是:
public JsonResult GetAllNews()
{
var items = newsService.FindAll();
var jsonResult = Json(items);
return jsonResult;
}
我的控制器单元测试如下:
public NewsControllerTest()
{
newsServiceStub = MockRepository.GenerateStub<INewsService>();
newsController = new NewsController(newsServiceStub);
}
[Test]
public void GetAllNews_should_use_news_service()
{
// Arrange
List<News> newsList = new List<News>();
newsServiceStub.Stub(s => s.FindAll()).Return(newsList);
// Act
var actual = newsController.GetAllNews();
// Assert
newsServiceStub.VerifyAllExpectations();
}
上面的代码测试通过了。但是,如果我将 GetAllNews() 更改为如下所示,那么它也会通过。不应该失败吗?我要测试的是 GetAllNews() 是否使用新闻服务:
public JsonResult GetAllNews()
{
return null;
}
【问题讨论】:
-
附带说明,您为什么认为这是一个有用的测试?
-
@bzim:我是初学者,还在学习。我并不总是很清楚要测试什么,不测试什么。
标签: c# asp.net-mvc unit-testing nunit