【发布时间】:2010-11-22 07:13:15
【问题描述】:
我想要测试的服务中有一个方法。该方法调用同一类中的另一个方法。该方法已经过测试,所以我想模拟该方法。
这是我的设置:
private readonly Mock<INewsLetterRepository> _mockNewsLetterRepository;
private readonly Mock<INewsLetterService> _mockNewsLetterService;
private readonly INewsLetterService _newsLetterService;
public NewsLetterServiceTest()
{
_mockNewsLetterRepository = new Mock<INewsLetterRepository>();
_mockNewsLetterService = new Mock<INewsLetterService> {CallBase = true};
_newsLetterService = new NewsLetterService(_mockNewsLetterRepository.Object);
}
这是我正在使用的测试:
[TestMethod]
public void CreateNewsLetter_Should_Return_Empty_NewsLetter()
{
var template = new Template
{
PlaceHolders = new List<TemplatePlaceholder>()
};
var newsLetter = new NewsLetter {Template = template};
const string content = "<html><body><!--BROWSER--></body></html>";
_mockNewsLetterService.Setup(x => x.BuildNewsLetterHTML(It.IsAny<NewsLetter>())).Returns(content);
var actual = _mockNewsLetterService.Object.CreateNewsLetter(newsLetter);
Assert.AreEqual(content, actual);
}
现在的问题是我正在模拟的函数:BuildNewsLetterHTML 返回 null 而不是它应该返回的内容。
这是我要测试的函数的简化版本:
public string CreateNewsLetter(NewsLetter newsLetter)
{
var newsletterHTML = BuildNewsLetterHTML(newsLetter);
return newsletterHTML;
}
所以问题是,至少在我看来,我模拟的函数没有返回它应该返回的内容字符串。测试在Assert.AreEqual 上失败,因为实际为空。你们中有人知道为什么实际为空吗?
提前致谢。
【问题讨论】: