CSharp - 请通过moq和 C# 检查我的单元测试

  显示原文与译文双语对照的内容
0 0

好日子 !

我只是开始学习和练习测试( 非 TDD: ) ) 。 我写了一些测试,但不知道- 是是绿的,但我不能做 red(fail) 。

我使用这个msdn论坛做例子。

所以,我创建了一个具有一个函数的接口。 带有某些 field- options.Name的参数options-对象,例如。


public interface ICmdParseWrapper
{
 String getName(ServiceArgs options);
}

public class CmdParserWrapper
{
 private readonly ICmdParseWrapper dependency;
 public CmdParserWrapper(ICmdParseWrapper dependency)
 {
 this.dependency = dependency;
 }
 public String ValidateGetName(ServiceArgs options)
 {
 return this.dependency.getName(options);
 }

 public static String getName(ServiceArgs options)
 {
 return (!String.IsNullOrEmpty(options.Name))? options.Name :"Error in getName! is null or empty";
 }
}

所以我创建了测试方法 ! 但我不确定我是对的,我是changet字符串"错误。",但是又次传递了测试。 这个类和测试方法。


[TestClass]
public class UnitTest1
{
 [TestMethod]
 public void TestMethod_getName()
 {
 ServiceArgs options=new ServiceArgs();
//options.ModeName="";

 var mock = new Mock<ICmdParseWrapper>();
 mock.Setup(foo=>foo.getName(options)).Returns("Error in getName! is null or empty");
 var testClass = new CmdParserWrapper(mock.Object);
 String validateGetName = testClass.ValidateGetName(options);
 mock.VerifyAll();
 }
}

请你告诉我,这是正确的测试?

时间: 原作者:

0 0

好开始,但有很多事情你可以改进。 因为我个人推荐你写好的单元测试,所以我个人推荐你做 TDD 。

可读性总是提供良好的测试方法名称。 你的测试不需要测试,因为它们是测试。 避免ambiguise名称,如 GetName 。 如果测试失败,你不知道测试导致失败的条件。 最好的方法是在测试方法名称中提供更多上下文

如果你想检查调用的GetName方法


 [TestMethod]
 public void ValidateGetName_VerifyGetNameMethodIsCalled()
 {
//Arrange 
 var mock = new Mock<ICmdParseWrapper>();
 var sut = new CmdParserWrapper(mock.Object);

//Act
 sut.ValidateGetName(It.IsAny<ServiceArgs>());

//Assert
 mock.Verify(x => x.GetName(It.IsAny<ServiceArgs>()));
 }

你的ValidateGetName方法没有太多的行为。 它只是调用另一个服务 methid 。 不需要下面的设置。


 mock.Setup(foo=>foo.getName(options)).Returns("Error in getName! is null or empty");

原作者:
...