【发布时间】:2013-08-29 20:45:48
【问题描述】:
我有部分代码覆盖,我不知道为什么。 对于那些在开始阅读之前就喜欢这个问题的人
想先说“第一次发帖”,而且我在我的开发生涯中仍然非常初级,但我是一个相对快速的学习者 (imo),所以就这样吧。使用Nunit进行测试,基于MVP。
要测试的代码 -
void _view_Delete(object sender, EventArgs<Guid> e)
{
_agRepo.Delete(_agRepo.GetByID(e.Value));
var g = _agRepo.GetAll();
if (g.Count() > 0)
{
_view.FillRelatableAccessGroups(g.Where(x => x.IsRelatable));//partial coverage
_view.FillStandAloneAccessGroups(g.Where(x => !x.IsRelatable));//partial coverage
}
else
{
_view.ShowErrorMsg(true, "No Access Groups Found.");
}
}
测试“if”和“else”语句的代码(假设 repo 和 view 被模拟)-
[Test]
public void TestDelete()
{
_view.Raise(v => v.Delete += null, this, new EventArgs<Guid>(1.ToGuid()));
_agRepo.AssertWasCalled(r => r.Delete(_agRepo.GetByID(1.ToGuid())));
_view.AssertWasCalled(v => v.FillRelatableAccessGroups(Arg<IEnumerable<AccessGroup>>.Is.Anything));
_view.AssertWasCalled(v => v.FillStandAloneAccessGroups(Arg<IEnumerable<AccessGroup>>.Is.Anything));
}
[Test]
public void TestDeleteNoGroups()
{
_agList.Clear();
_view.Raise(v => v.Delete += null, this, new EventArgs<Guid>(1.ToGuid()));
_agRepo.AssertWasCalled(r => r.Delete(_agRepo.GetByID(1.ToGuid())));
_view.AssertWasNotCalled(v => v.FillRelatableAccessGroups(Arg<IEnumerable<AccessGroup>>.Is.Anything));
_view.AssertWasNotCalled(v => v.FillStandAloneAccessGroups(Arg<IEnumerable<AccessGroup>>.Is.Anything));
_view.AssertWasCalled(x => x.ShowErrorMsg(true, "No Access Groups Found."));
}
所以我的问题是,我的代码中缺少什么。我需要测试更多的东西,我真的很想找到它。我一直低着头试图完全理解测试的进出。测试驱动开发是我的目标。如果有人有任何类型的输入(好或坏),将不胜感激。我什至不介意有人能把我扔得足够多,这样我就可以开始拉动那根隐喻的弦,它的结尾有我正在寻找的答案。我希望我已经为大家提供了足够的信息。谢谢!
【问题讨论】:
-
nunit 所说的代码的哪一部分没有被您的测试覆盖?
-
它的 teamcity 声明它没有被覆盖。 Nunit 测试通过。我在上面的代码中有 cmets 表示有问题的代码。
-
您断言
r.Delete()已被调用。该代码未经过测试。另外,我看不到您在哪里分配数据以从_agRepo.GetAll()返回。如果您已将其设置为返回零项,则不会评估x.IsRelatable。您是否已将 nUnit 设置为忽略对简单 get/set 属性的覆盖? -
嗯....我想我明白你在说什么。目前无法测试,直到明天。我将看看当我将 GetAll 设置为返回某物然后断言当 g 访问列表时正在调用 isRelatable 时会发生什么?如果我的词汇量没有达到标准,我再次道歉,如果我错误地使用了特定的单词或术语,请随时纠正我。 “你不知道你不知道什么”。另外,不确定 Nunit 是如何配置的。这是一个标准安装并将其作为外部调试器运行。对团队来说还是新手,但我可以确定它是否有助于解决问题。
标签: c# visual-studio-2010 unit-testing nunit code-coverage