【发布时间】:2019-04-24 06:25:20
【问题描述】:
我正在尝试使用 NUnit 运行单元测试,因此遵循了一个教程,其中说明了以下内容:
[TestFixture]
public class TestFootballplayerController
{
[Test]
public void FootBallPlayer_CheckingIfControllerReturnsCorrectView_MustReturnTrue()
{
string expected = "CreatePlayer";
FootballplayerController controller = new FootballPlayerController();
var result = controller.CreateIngredient() as ViewResult;
Assert.AreEqual(expected, result.ViewName);
}
}
本教程假设我有一个空的默认构造函数,但我的构造函数包含一个带有我的 DBContext 的参数,如下所示:
public class FootballplayerController : Controller
{
private readonly FootballContext _context;
public FootballplayerController(FootballContext context)
{
_context = context;
}
public IActionResult CreatePlayer()
{
return View();
}
}
Visual Studio 建议我创建一个空的构造函数,但这样我想我只会测试一些不应该测试的东西,而不是带有参数的正确构造函数。
如果答案很明显,那么我必须说,我是单元测试的新手,无法解决这个问题。我必须伪造一个参数吗?
【问题讨论】:
-
你需要注入上下文依赖
-
如前所述,您需要向正在测试的控制器提供上下文(依赖关系)的实例。
-
也就是说,控制器应该依赖于抽象而不是具体。否则,在这种情况下,您需要使用内存数据库运行集成测试以连接上下文。如果您想单独测试控制器,则将上下文抽象出来。
-
Nkosi 上面的 cmets 是这个问题的正确答案
-
@Nkosi 谢谢,但这是否意味着我必须在控制器上使用 NSubstitute?你给我的第二个答案我完全不明白,对不起。让我困惑的是,我只想检查控制器是否返回正确的视图,但感觉它需要的工作和知识比我这样的菜鸟想象的要多。
标签: c# asp.net-mvc unit-testing testing nunit