第二次方法调用的单元测试
Unit test of the second method call
我有一个使用 Moq 和 Fluent Assertions 的单元测试:
[Fact]
public void GetSymbols_ShouldSetSucceedToTrue_WhenSecondAttemptSucceed()
{
string selectedFileName = "testFileName.txt";
string[] expectedResult = new string[] { "testSymbol1", "testSymbol2" };
Mock<IOpenFileDialogService> mockFileDialogService = new Mock<IOpenFileDialogService>();
mockFileDialogService.SetupSequence(m => m.ShowDialog()).Returns(false).Returns(true);
mockFileDialogService.Setup(m => m.FileName).Returns(selectedFileName);
Mock<IFileService> mockFileService = new Mock<IFileService>();
mockFileService.Setup(m => m.ReadAllLines(selectedFileName)).Returns(expectedResult);
SymbolsProviderFromFile spff = new SymbolsProviderFromFile(mockFileDialogService.Object, mockFileService.Object);
// Act
spff.GetSymbols();
IEnumerable<string> result = spff.GetSymbols();
// Assert
using (new AssertionScope())
{
result.Should().Equal(expectedResult);
spff.Succeed.Should().BeTrue();
}
}
我想检查我的方法的第二次调用。
不幸的是,当我调试这段代码时,spff.GetSymbols()
方法只被调用一次,并且在检查结果时在 result.Should().Equals(expectedResult)
行调用它。这里有某种延迟加载——只有在需要结果时才调用该方法。
为什么不在 spff.GetSymbols()
行中立即调用它?如何更改此行为以及如何在单元测试中两次调用测试方法?
感谢@Dennis Doomen,问题已解决。
关于不立即执行方法的问题出现在使用 yield return
的 spff.GetSymbols()
方法的实现中,因此它与单元测试没有真正的关系。
我有一个使用 Moq 和 Fluent Assertions 的单元测试:
[Fact]
public void GetSymbols_ShouldSetSucceedToTrue_WhenSecondAttemptSucceed()
{
string selectedFileName = "testFileName.txt";
string[] expectedResult = new string[] { "testSymbol1", "testSymbol2" };
Mock<IOpenFileDialogService> mockFileDialogService = new Mock<IOpenFileDialogService>();
mockFileDialogService.SetupSequence(m => m.ShowDialog()).Returns(false).Returns(true);
mockFileDialogService.Setup(m => m.FileName).Returns(selectedFileName);
Mock<IFileService> mockFileService = new Mock<IFileService>();
mockFileService.Setup(m => m.ReadAllLines(selectedFileName)).Returns(expectedResult);
SymbolsProviderFromFile spff = new SymbolsProviderFromFile(mockFileDialogService.Object, mockFileService.Object);
// Act
spff.GetSymbols();
IEnumerable<string> result = spff.GetSymbols();
// Assert
using (new AssertionScope())
{
result.Should().Equal(expectedResult);
spff.Succeed.Should().BeTrue();
}
}
我想检查我的方法的第二次调用。
不幸的是,当我调试这段代码时,spff.GetSymbols()
方法只被调用一次,并且在检查结果时在 result.Should().Equals(expectedResult)
行调用它。这里有某种延迟加载——只有在需要结果时才调用该方法。
为什么不在 spff.GetSymbols()
行中立即调用它?如何更改此行为以及如何在单元测试中两次调用测试方法?
感谢@Dennis Doomen,问题已解决。
关于不立即执行方法的问题出现在使用 yield return
的 spff.GetSymbols()
方法的实现中,因此它与单元测试没有真正的关系。