Редактировать: Решено
Код на самом деле в порядке.На самом деле оцениваемый метод на самом деле вызывается более одного раза.Но тогда Rhino Mocks Repeat.Once()
не показывает правильное поведение ...
Я перехожу из RhinoMocks в Moq и не могу заставить Moq работать должным образом, используя mock.SetupSequence(...).Returns(...).Throws(...)
.
У меня есть несколько тестов, использующих nUnit TestCaseSource
.
В RhinoMocks был некоторый код, который использовал вызов Stub
, с Repeat.Once()
.Это работало нормально.Но теперь я перешел на Moq и сделал SetupSequence
, написанное выше.Каждый раз при создании метода SetUp
создается новый объект, но я получаю исключение.
TestCaseSource:
public static IEnumerable<TestCaseData> SettingsTestCases
{
get
{
// Null Settings
yield return new TestCaseData(null);
// Null Acquisition
yield return new TestCaseData(new Settings(null, new Optics()));
// Null Optics
yield return new TestCaseData(new Settings(new Acquisition(), null));
}
}
SetUp:
private Mock<ISample> foo;
[SetUp]
public void SetUp()
{
foo = new Mock<IFoo>();
}
Тест:
[Test, TestCaseSource(nameof(SettingsTestCases))]
public void PerformTest(Settings settings)
{
//THESE RHINO MOCKS LINES WORKS
//foo.Stub(x => x.GetSettings(ExperimentId.)).Return(settings);
//foo.Expect(x => x.Carrier).Return("Type1").Repeat.Once();
//IN MOQ, ALWAYS GET THE EXCEPTION
foo.Setup(x => x.GetSettings(Experiment.Id)).Returns(settings);
foo.SetupSequence(x => x.Carrier)
.Returns("Type1")
.Throws(new Exception("Called too many times"));
{ do asserts here }
}
Я заметил, что перед каждым запуском теста (3 раза из-за TestCaseSource) он всегда нажимает SetUp
и создает новый экземпляр Mock<IFoo>
.Итак, для каждого теста у нас каждый раз появляется новый foo
, но в итоге кажется, что вызовы SetupSequence
распределяются между 3 экземплярами, потому что у меня есть исключение , но я уверен, чтоон вызывается только один раз для каждого теста. Rhino Mocks Repeat.Once()
работает хорошо и, похоже, ссылается только на один конкретный экземпляр.
Могу ли я написать код другим способом, чтобы получить тот же ответ, что и старый код (Rhino Mocks)?