Смешивание MockVerify и FluentAssertions.Should () в C # - PullRequest
0 голосов
/ 11 декабря 2018

Я пытаюсь сделать следующее в моем модульном тесте:

var sut = new MyClass(dependentOne.Object, dependentTwo.Object);
            Action act = () => sut.DoSomething();
            // Assert
            dependentOne.Verify(m => m.MethodOne(), Times.Once);
            dependentTwo.Verify(m => m.MethodTwo(), Times.Once);
            act.Should().NotThrow<Exception>();

Похоже, два метода MethodOne() и MethodTwo(), которые будут вызываться в DoSomething (), вообще не вызываются, ноесли я вызываю напрямую без Action, методы вызываются.

sut.DoSomething();

Хотя я не конкретизировал определение методов и инициализации, но приведенного выше фрагмента кода должно быть достаточно для объяснения ситуации.Итак, разве Action act = () => sut.DoSomething(); не должен на самом деле вызывать методы, чтобы Verify работал должным образом?

1 Ответ

0 голосов
/ 11 декабря 2018

Метод вызывается только в том случае, если вызывается

act()

или

act.Invoke()

.Присвоение переменной Action эквивалентно определению метода, и ничего не вызывается.

Однако в вашем случае утверждение, что оно не выбрасывает, вызовет метод, поэтому, если вы переместите свое утверждение, что оно не выбрасывает до того, какVerify строк все должно работать нормально.

Вы можете увидеть, как здесь реализовано NotThrow https://github.com/fluentassertions/fluentassertions/blob/master/Src/FluentAssertions/Specialized/ActionAssertions.cs

...