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