使用Moq和NUnit,什么是写入方法/更好的语法?

Asa*_*sad 1 c# installation nunit unit-testing moq

我试图测试这种行为

- BLOGTableAdapter.GetBlogsByTitle(字符串标题)被调用,仅一次

- 并且使用长度大于1的字符串调用,

- 它返回BLOGDataTable对象

 [Test]
    public void GetBlogsByBlogTitleTest4()
    {
        var mockAdapter = new Mock<BLOGTableAdapter>();
        var mockTable = new Mock<BLOGDataTable>();

        mockAdapter.Setup(x => x.GetBlogsByTitle(It.Is<string>(s => s.Length > 0))).Returns(mockTable.Object);

        var blogBl = new BlogManagerBLL(mockAdapter.Object);
        blogBl.GetBlogsByBlogTitle("Thanks for reading my question");

        mockAdapter.VerifyAll();
        mockAdapter.Verify(x => x.GetBlogsByTitle(It.Is<string>(s => s.Length > 0)), Times.Exactly(1));
    }
Run Code Online (Sandbox Code Playgroud)

当调用GetBlogsByTitle(字符串标题)时,在类Aceessess层中说"BlogManagerBLL"

public BLOGDataTable GetBlogsByBlogTitle(string title)
        {
            return Adapter.GetBlogsByTitle(title);
        }
Run Code Online (Sandbox Code Playgroud)

如您所见,我使用两个单独的语句来完成这些检查

mockAdapter.Setup(x => x.GetBlogsByTitle(It.Is<string>(s => s.Length > 0))).Returns(mockTable.Object);    
mockAdapter.Verify(x => x.GetBlogsByTitle(It.Is<string>(s => s.Length > 0)), Times.Exactly(1));
Run Code Online (Sandbox Code Playgroud)
  1. 我怎么能把这个写成一个陈述?
  2. 我测试的是正确的吗?

谢谢

Chr*_*sal 5

如果您正在测试两件事,那么您应该编写两个测试.

[Test]
public void BlogTableAdapter_should_be_called_with_string_having_length_greater_than_1()
{
    var mockAdapter = new Mock<BLOGTableAdapter>();

    var blogBl = new BlogManagerBLL(mockAdapter.Object);
    blogBl.GetBlogsByBlogTitle("Thanks for reading my question");

    mockAdapter.Verify(x => x.GetBlogsByTitle(It.Is<string>(s => s.Length > 0)));
}
Run Code Online (Sandbox Code Playgroud)

[Test]
public void BlogTableAdapter_should_return_a_BLOGDataTable_object()
{
    var mockAdapter = new Mock<BLOGTableAdapter>();
    mockAdapter.Setup(x => x.GetBlogsByTitle(It.Is<string>(s => s.Length > 0))).Returns(new BLOGDataTable());

    var blogBl = new BlogManagerBLL(mockAdapter.Object);
    var returnValue = blogBl.GetBlogsByBlogTitle("Thanks for reading my question");

    Assert.That(returnValue, Is.TypeOf(typeof(BLOGDataTable)));
}
Run Code Online (Sandbox Code Playgroud)

所以我想我的建议是不要把它们放在一起,为每个创建一个测试.而且我会说你正在测试正确的东西.