我在VS2013上使用TFS。我在编写测试时使用TestCaseSource
:
[Test]
[TestCaseSource("GetExtraWifQuestionsTestData")]
public void GetExtraWifQuestionsTest(WifWillTypeQuestionsViewModel viewModel, IEnumerable<QuestionItemViewModel> expected)
{
viewModel.GetExtraWifQuestions();
for (int i = 0; i < expected.Count(); i++)
{
Assert.True(expected.ElementAt(i).Equals(viewModel.QuestionItems.ElementAt(i)));
}
}
问题是我在GetExtraWifQuestionsTestData()
中有很多测试用例,其中一些测试用例失败了。
在测试用例数据中构造的对象非常复杂,并且正在使用帮助程序生成模拟的部分数据。 (只有少数案例作为例子还有更多)
public IEnumerable<TestCaseData> GetExtraWifQuestionsTestData()
{
yield return
new TestCaseData(
new WifWillTypeQuestionsViewModel(
MocksHelper.WifView,
new TransactionMain
{
TransactionDetailList =
new Collection<TransactionDetail>(
new[] { new TransactionDetail { DefaultQuestions = QuestionTestCaseDataHelper.WifWillTypeQuestions(), TransactionWill = new TransactionWill { IsCouple = 1L, WillTypeRecomendationResolutions = QuestionTestCaseDataHelper.WillTypeRecomendationResolutions.ToList()} } })
},
new QuestionControlFactory(MocksHelper.IViewFactory))
{
QuestionItems =
new CustomerQuestionCollection(
QuestionTestCaseDataHelper.WifWillTypeQuestionItemViewModelQuestionAnswerGeneratorByAnswerNullsNotAdded(true, true, null, false, false))
},
QuestionTestCaseDataHelper.WifWillTypeQuestionItemViewModelQuestionAnswerGeneratorByAnswerNullsNotAdded(true, true, null, false, false)
.Concat(QuestionTestCaseDataHelper.WifWillTypeQuestionItemViewModelQuestionAnswerGeneratorByAnswer(null, null, null, null, null, null, null).Where(o => o.Question.DisplayOrder == 7)));
yield return
new TestCaseData(
new WifWillTypeQuestionsViewModel(
MocksHelper.WifView,
new TransactionMain
{
TransactionDetailList =
new Collection<TransactionDetail>(
new[] { new TransactionDetail { DefaultQuestions = QuestionTestCaseDataHelper.WifWillTypeQuestions(), TransactionWill = new TransactionWill { IsCouple = 1L, WillTypeRecomendationResolutions = QuestionTestCaseDataHelper.WillTypeRecomendationResolutions.ToList() } } })
},
new QuestionControlFactory(MocksHelper.IViewFactory))
{
QuestionItems =
new CustomerQuestionCollection(
QuestionTestCaseDataHelper.WifWillTypeQuestionItemViewModelQuestionAnswerGeneratorByAnswerNullsNotAdded(true, true, null, false, false, null, true))
},
QuestionTestCaseDataHelper.WifWillTypeQuestionItemViewModelQuestionAnswerGeneratorByAnswerNullsNotAdded(true, true, null, false, false, null, true)
.Concat(QuestionTestCaseDataHelper.WifWillTypeQuestionItemViewModelQuestionAnswerGeneratorByAnswer(null, null, null, null, null, null, null, null, null).Where(o => o.Question.DisplayOrder == 8)));
}
我可以使用Unit sessions window
来运行特定的测试用例失败
然后通过浏览堆栈跟踪,我可以找出导致错误的原因,有时它是需要更改的测试用例数据(机制按预期工作 - 测试已过时)。
但是当我需要在GetExtraWifQuestionsTestData
中编辑某些TestCaseData
时,我无法找到一种方法来确定哪一个确实失败了。
如何确定哪些测试用例失败?是否有任何内置机制可以执行此操作,或者是一些低功耗的“黑客”。请回答这个问题时请记住,我们不是在谈论这个具体案例,而是在使用复杂的模拟机制时如何做到这一点,并且不会立即明白哪个是哪个。
更新: ATM我正在评论所有案例,然后逐一取消注释,但这不是一种非常有效的方式。
答案 0 :(得分:1)
创建rain.3h
时,请将其分解为方法并使用TestCaseData
方法。
SetName
然后当您创建private TestCaseData TestCaseData1()
{
TestCaseData data = new TestCaseData();
// set your variables
data.SetName("TestCaseData1");
return data;
};
private TestCaseData TestCaseData2()
{
TestCaseData data = new TestCaseData();
// set your variables
data.SetName("TestCaseData2");
return data;
};
...
IEnumerable
然后,当您运行测试时,它们将单独显示,而不是与通用方法名称一起显示。
它不会让我发布图片,但它会显示如下:
通过测试(2)
()TestCaseData1
()TestCaseData2
答案 1 :(得分:0)
想出 a 解决方案。
将断点置于TestCaseData
初始化机制(在TestCaseDatas之一中创建的某个对象)中,然后使用debug运行单个失败测试。
当TestCaseData
初始化时,它将触及断点。在断点处打开Call Stack window
并转到最底线(如果它不在最后一行则遍历它们) - 您应该最终进入yield return new TestCaseData(...
(见下面的屏幕截图)
这是失败的测试用例。
现在我不接受这个答案,万一有人有'更好'的解决方案。我的意思是这比评论测试更快,但仍需要时间。