Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.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# Mstest classinitialize显示错误的签名错误消息_C#_Mstest - Fatal编程技术网

C# Mstest classinitialize显示错误的签名错误消息

C# Mstest classinitialize显示错误的签名错误消息,c#,mstest,C#,Mstest,我第一次使用Mstest并编写了一个单元测试。我使用了ClassInitiaze属性 用于设置。自从我这么做以后,我一直在收到这个信息 消息:方法TryDI.Tests.HouseKeeperServiceTests.TestSetup的签名错误。 该方法必须是静态的、公共的、不返回值且应采用 TestContext类型的单个参数。另外,, 若您使用的是AsyncWait-in方法,那个么返回类型必须是Task 我做错了什么 [TestClass] public

我第一次使用Mstest并编写了一个单元测试。我使用了ClassInitiaze属性 用于设置。自从我这么做以后,我一直在收到这个信息

消息:方法TryDI.Tests.HouseKeeperServiceTests.TestSetup的签名错误。 该方法必须是静态的、公共的、不返回值且应采用 TestContext类型的单个参数。另外,, 若您使用的是AsyncWait-in方法,那个么返回类型必须是Task

我做错了什么

        [TestClass]
        public class HouseKeeperServiceTests
        {
            private HousekeeperService _service;
            private Mock<IStatementGenerator> _statementGenerator;
            private Mock<IEmailSender> _emailSender;
            private Mock<IXtraMessageBox> _messageBox;
            private DateTime _statementDate = new DateTime(2017, 1, 1);
            private Housekeeper _houseKeeper;
      
            [ClassInitialize]
            public void TestSetup()
            {    
                _houseKeeper = new Housekeeper { Email = "a", FullName = "b", Oid = 1, StatementEmailBody = "c" };

                var unitOfWork = new Mock<IUnitOfWork>();
                unitOfWork.Setup(uow => uow.Query<Housekeeper>())
                    .Returns(new List<Housekeeper>
                    {
                       _houseKeeper

                    }.AsQueryable());

                _statementGenerator = new Mock<IStatementGenerator>();
                _emailSender = new Mock<IEmailSender>();
                _messageBox = new Mock<IXtraMessageBox>();

                var service = new HousekeeperService(unitOfWork.Object,
                                                     _statementGenerator.Object,
                                                     _emailSender.Object,
                                                     _messageBox.Object);
            }

            [TestMethod]
            public void SendStatementEmails_WhenCalled_GenerateStatements()
            {
                _service.SendStatementEmails(_statementDate);

                _statementGenerator.Verify(sg =>
                   sg.SaveStatement(_houseKeeper.Oid, _houseKeeper.FullName, (_statementDate)));
            }
        }
        
        
[TestClass]
公营房屋维修测试
{
私人住宅维修服务;
专用模拟语句生成器;
私人模拟电子邮件发送者;
私人模拟邮箱;
私有日期时间_statementDate=新日期时间(2017,1,1);
私人管家;
[分类初始化]
公共void TestSetup()
{    
_管家=新管家{Email=“a”,FullName=“b”,Oid=1,StatementEmailBody=“c”};
var unitOfWork=new Mock();
unitOfWork.Setup(uow=>uow.Query())
.返回(新列表)
{
_管家
}.AsQueryable());
_statementGenerator=new Mock();
_emailSender=new Mock();
_messageBox=newmock();
var service=new HousekeeperService(unitOfWork.Object,
_statementGenerator.Object,
_emailSender.Object,
_messageBox.Object);
}
[测试方法]
public void sendstatement电子邮件\u当调用\u GenerateStatements()时
{
_服务。SendStatementEmails(_statementDate);
_语句生成器。验证(sg=>
sg.SaveStatement(_houseKeeper.Oid,_houseKeeper.FullName,(_statementDate));
}
}

它在错误消息中

TryDI.Tests.HouseKeeperServiceTests.TestSetup的签名错误。方法必须是静态的,…,并且应该采用TestContext类型的单个参数

工作示例:

  [ClassInitialize()]
  public static void ClassInit(TestContext context)
  {
     MessageBox.Show("ClassInit");
  }
另一个选项是使用
[TestInitialize]


另请参见可以使用TestInitialize的

    [TestInitialize]
    public static void TestSetup() { }
但如果您想使用ClassInitialize,请参阅以下帖子:

“需要添加ClassInitialize属性,然后尝试使方法名称与属性不同,因为这可能会混淆编译器”

例如:

[ClassInitialize()]
public static void TestSetup(TestContext context){  }
无论如何,您应该知道TestInitializer和ClassInitializer之间的区别:

TestInitialize在声明属性的同一类上声明的每个测试之前运行。”

ClassInitialize仅在声明属性的类的初始化时运行。换句话说,它不会对每个类都运行。只对 包含ClassInitialize方法。“


更多信息:.

当我这样做的时候,我在代码开始时声明的私有变量上有很多模糊的红线。我在Testsetup方法中使用的是[TestInitialize]。这对我来说没有任何问题