0

再会!

我刚刚开始学习和练习测试(不是 TDD :))。所以,我写了一些小测试,但不知道 - 对吗?它是绿色的,但我不能做红色(失败)。

我以这个 msdn 论坛为例来做这件事。

因此,我创建了一个具有一个功能的界面。参数选项 - 带有一些字段的对象 - options.Name 例如。

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";
    }
}

所以,我创建了 testMethod 并且它通过了!但我不确定——我对吗?我更改字符串“错误!...”但测试再次通过。这里有这个类和测试方法。

[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();
    }
}

拜托,你能告诉我——那个测试对吗?

4

1 回答 1

1

好的开始,但有很多事情可以改进。我个人建议你做 TDD,因为它可以帮助你编写好的单元测试。

可读性总是给一个好的测试方法名称。您的测试中不需要 TestMethod,因为它们是测试。避免混淆名称,例如 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 方法没有太多行为。它只是调用另一个服务方法。不需要以下设置。

     mock.Setup(foo=>foo.getName(options)).Returns("Error in getName! is null or empty");
于 2013-10-09T08:11:02.727 回答