[英]How to unit test KnockoutUtility in C#?
我有一个使用以下方法获取删除消息的类:
public IEnumerable<Message> GetKnockoutMessages(Data data)
{
if(data.Messages != null)
{
return data.Messages.Where(m => m.UnderWritingRuleId != null);
}
else
{
return new List<Message>();
}
}
到目前为止,我有一个单元测试,仅部分覆盖了下面的单元测试。
[TestMethod]
public void TestGetKnockoutMessages()
{
KnockoutUtility knockUtility = new KnockoutUtility();
IEnumerable<Message> messages = knockUtility.GetKnockoutMessages(MockData.Object);
Assert.IsNotNull(messages);
}
这将覆盖return data.Messages.Where(m => m.UnderWritingRuleId != null);
所有内容return data.Messages.Where(m => m.UnderWritingRuleId != null);
我想知道如何对该方法进行单元测试以获得100%的覆盖率。
任何帮助,将不胜感激。 谢谢
该单元测试无法涵盖所有内容,因为您没有验证所有案例。 您必须测试两种逻辑:
if/else
逻辑 Where(m => m.UnderWritingRuleId != null)
逻辑 基于此假设,您必须创建证明以下情况的案例:
data.Messages
为null
则必须验证该方法是否返回List<Message>()
新实例,因为您是在这样的代码中指定的。 data.Messages
为空(这意味着此条件data.Messages.Count() == 0
),则验证方法是否返回IEnumerable<Message>
。 Where(m => m.UnderWritingRuleId != null)
。 换句话说,仅填充UnderWritingRuleId
消息。 为了实现我提到的内容,您必须创建满足这种情况的Data
对象。 我不知道什么是MockData.Object
但我希望您在其中包括您的安排。
每个案例应采用单独的测试方法,如下所示:
[TestMethod]
public void TestGetKnockoutMessages_Case1()
{
// Arrange
// Action
// Assert
}
[TestMethod]
public void TestGetKnockoutMessages_Case2()
{
// Arrange
// Action
// Assert
}
[TestMethod]
public void TestGetKnockoutMessages_Case3()
{
// Arrange
// Action
// Assert
}
安排是您配置模型的地方。 行动是你执行要测试和断言是地方,你做的断言方法的地方。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.