我有一个单元测试,用于验证(使用Moq)调用特定函数的次数。它应该被调用两次。
在Visual Studio中右键单击并运行它时,测试通过。当你运行整个套件 - 包括这个测试 - 这个测试,只有这个测试失败,说这个函数只被调用一次。
没有为此测试运行的设置或拆卸功能 - 只是模拟存储库和几行测试代码。
右键单击以运行测试时,我可以调试它并验证函数是否确实被调用了两次。但据我所知,我无法在调试模式下运行整个测试套件。
我怎样才能找出为什么这个测试在单个和套件运行中表现不同?
编辑:代码。我正在验证SaveChanges()方法
public override void SaveChanges()
{
bool isNew = CurrentCampaign.IsNewCampaign;
DocTreeViewModel.SaveChanges(); //this method posted below
using (IRepository r = Rep.Renew())
{
foreach (Quote quote in CurrentCampaign.Quotes)
{
r.Update(quote);
}
r.SaveChanges(); // called here
}
if (isNew)
{
CreateScheduleDocument();
}
}
// this is the code in DocTreeViewModel.SaveChanges
public override void SaveChanges()
{
using(IRepository r = Rep.Renew())
{
// Flatten is an extension method to flatten a recursive tree
foreach(DocumentCategory dc in DocumentCategories.Flatten())
{
r.Update(dc);
}
r.SaveChanges(); //called here
}
}
// mock setup
private Mock<IRepository> GetMockRepository()
{
Mock<IRepository> repMock = new Mock<IRepository>();
repMock.Setup(m => m.Renew()).Returns(repMock.Object);
repMock.Setup(m => m.Update(It.IsAny<Campaign>())).Verifiable();
repMock.Setup(m => m.SaveChanges()).Verifiable();
ItemType it1 = new ItemType { ItemTypeId = 1 };
repMock.Setup(m => m.GetItemTypes()).Returns((new List<ItemType> { it1 }).AsQueryable);
return repMock;
}
//test
[TestMethod]
public void Assert_SignOff_ChangesStatusEnum()
{
Mock<IRepository> repMock = GetMockRepository();
CampaignOverviewViewModel vm = new CampaignOverviewViewModel(new Campaign(), repMock.Object, new Mock<IMsgBoxService>().Object);
vm.SignOff(); //this calls SaveChanges
Assert.AreEqual(CampaignStatus.Signed, vm.CurrentCampaign.StatusEnum);
repMock.Verify(m => m.SaveChanges(), Times.Exactly(2));
}