预期结果?
我为我的单元测试使用了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>()
来保持事情的清洁。
上一篇: expected result?
下一篇: c#