预期结果?

我为我的单元测试使用了Moq并获得了以下方法:

[TestMethod]
public void GetTestRunById_ValidId_TestRunReturned()
{
    var mockTestRunRepo = new Mock<IRepository<TestRun>>();
    var testDb = new Mock<IUnitOfWork>();

    testDb.SetupGet(m => m.TestRunsRepo).Returns(mockTestRunRepo.Object);

    TestRun returnedRun = EntityHelper.getTestRunByID(testDb.Object, 1);
}

正在测试的方法是getTestRunByID()。 我已经确认在调试这个单元测试时调用了这个方法,但是正如所期望的那样,getTestRunByID()不会返回任何东西,因为模拟里面没有数据。

所有重要的是方法被击中并返回null? 如果不是,那么如何将数据添加到我的mockTestRunRepo,当它仅作为来自testDb的返回值出现时?

作为参考,正在测试的方法是:

public static TestRun getTestRunByID(IUnitOfWork database, int testRun)
{
    TestRun _testRun = database.TestRunsRepo.getByID(testRun);
    return _testRun;
}

单元测试的目的是仅测试小方法getTestRunByID 。 为此,请使用该整数参数测试它是否仅被调用一次1

mockTestRunRepo.Verify(m => m.getByID(1), Times.Once());

您还必须为mockTestRunRepo设置方法getByID ,使其返回特定值,并测试测试运行的结果值是否与您的预期相同。

//instantiate something to be a TestRun object.
//Not sure if abstract base class or you can just use new TestRun()
mockTestRunRepo.Setup(m => m.getByID(1)).Returns(something);

测试你是否得到相同的价值

TestRun returnedRun = EntityHelper.getTestRunByID(testDb.Object, 1);
Assert.AreEqual(returnedRun, something);

此代码可能容易出错,因为我目前没有环境来测试它。 但这是单元测试背后的一般想法。

这样,您可以测试getById方法是否按预期运行,并返回预期结果。


您的存储库以与设置其他所有内容相同的方式返回数据。

var mockTestRunRepo = new Mock<IRepository<TestRun>>();

// This step can be moved into the individual tests if you initialize
// mockTestRunRepo as a Class-level variable before each test to save code.
mockTestRunRepo.Setup(m => m.getById(1)).Returns(new TestRun());

Per @ Sign的推荐,如果你知道你用1调用它,那么用它来代替It.IsAny<int>()来保持事情的清洁。

链接地址: http://www.djcxy.com/p/35343.html

上一篇: expected result?

下一篇: c#