c# - 如何在 ASP.NET MVC 5 项目中编写单元测试?
问题描述
我有一个在 ASP.NET MVC 5 框架之上用 c# 编写的项目。我使用Unity-container设置了一个 IoC来处理依赖注入。
我需要编写一些测试用例来帮助我测试我的项目。我在我的解决方案中添加了一个新项目(单元测试项目(.NET Framework))进行测试。在我的第一个测试类中,我需要利用我的Ioc
容器来解决依赖关系。
我尝试为我的测试类进行构造函数注入,但我收到一个错误,指出存在无参数构造函数。
如何正确设置我的测试类,以便从IoC
容器初始化我的依赖项并准备好进行测试?
这是我的第一个测试课
[TestClass]
public class AnnouncerTests
{
private static IAnnouncer Accouncer;
[ClassInitialize]
public static void SetUp(TestContext context)
{
// this does not work
var container = UnityConfig.GetConfiguredContainer();
Accouncer = new Announcer(container);
}
[TestMethod]
public void Multiple_Events_Fire_When_Event_Rises()
{
var user = new User()
{
FirstName = "First Name Test",
LastName = "Last Name Test"
};
Accouncer.Announce(new UserWasCreated(user));
// Assert .....
}
}
如何从测试类中解析 IoC 中的类型?
解决方案
您不需要在测试中使用容器。该容器只需要解决应用程序中的依赖关系,没有理由在测试中使用它。
对于测试类,您必须模拟您的依赖项。有很多用于模拟和创建测试数据的库:Moq、NSubstitute、Autofixture。
在此处发布有关如何使用 Moq 在 mvc 中测试控制器的信息
推荐阅读
- ios - 使用自动布局删除 UILabel 的空白空间
- javascript - JS嵌套问题,变量以任何方式返回未识别
- powershell - Powershell:递归替换所有.ini文件中的字符串
- php - 为每一列添加一个标题
- android - 将匕首子组件注入活动的问题
- python - 如何使用 pywin32 包中的combrowser.py?
- angularjs - ng-click 中的 concat 字符串参数
- javascript - JavaScript - 如何添加一个作为内置原型函数的函数
- javascript - 带有 OrbitControls 的 SVGRenderer 在对面显示两个 SVG 元素
- unity3d - 如何为两个图像之间的共享空间着色?