Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在ASP.NETMVC5项目中编写单元测试?_C#_Asp.net Mvc_Unit Testing_Unity Container - Fatal编程技术网

C# 如何在ASP.NETMVC5项目中编写单元测试?

C# 如何在ASP.NETMVC5项目中编写单元测试?,c#,asp.net-mvc,unit-testing,unity-container,C#,Asp.net Mvc,Unit Testing,Unity Container,我有一个项目是在ASP.NET MVC 5框架之上用c#编写的。我建立了一个用于处理依赖注入的IoC 我需要写一些测试用例来帮助我测试我的项目。我在解决方案中添加了一个新项目(单元测试项目(.NET Framework)),以进行测试。在我的第一个测试类中,我需要利用我的Ioc容器来解决依赖关系 我试图为我的测试类进行构造函数注入,但我得到了一个错误,指出有一个无参数构造函数 如何正确设置测试类,使依赖项从IoC容器初始化并准备好进行测试 这是我的第一节考试课 [TestClass] publi

我有一个项目是在ASP.NET MVC 5框架之上用c#编写的。我建立了一个用于处理依赖注入的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


发布关于如何在mvc中使用Moq测试控制器的帖子

您不需要在测试中使用容器。该容器仅用于解决应用程序中的依赖关系,没有理由在测试中使用它

对于测试类,您必须模拟依赖项。有很多用于模拟和创建测试数据的库:Moq、NSubstitute、Autofixture


关于如何在mvc中使用Moq测试控制器的帖子

如果您要使用真实对象(因为您想设置Unity,所以可能要这样做),那么您将同时测试代码的多个位。这违背了单元测试的目的。在单元测试中,您应该准确地确定要测试的公共方法(称为System Under test或SUT)。任何已经存在的外部依赖都应该被模拟,不要使用真正的实现。这将隔离您的测试,以便您可以严格控制外部位对您的测试所做的操作,以便您可以模拟预期的和意外的行为,以确保SUT工作。如果您要使用真实的对象(您可能会这样做,因为您想建立Unity),那么您将同时测试代码的多个位。这违背了单元测试的目的。在单元测试中,您应该准确地确定要测试的公共方法(称为System Under test或SUT)。任何已经存在的外部依赖都应该被模拟,不要使用真正的实现。这将隔离您的测试,以便您可以严格控制外部位对您的测试所做的操作,从而可以模拟预期和意外的行为,以确保SUT正常工作。