Я бы изменил код следующим образом:
//Test
[Test]
public void NetworkProviderShouldBeEmailedWhenBackHaulMaximumIsReached()
{
var mockRepo = new MockRepository();
var apMock = mockRepo.PartialMock<AccessPoint>();
using (mockRepo.Record())
{
Expect.Call(apMock.EmailNetworkProvider).Repeat.Once();
}
using (mockRepo.Playback())
{
apMock.BackHaulMaximum = 81;
Assert.AreEqual(true, apMock.BackHaulMaximumReached());
}
mockRepo.VerifyAll();
}
Что вы ожидаете, так это то, что при вводе данных в класс при вызове метода также вызывается другой метод, который вызывает некоторые нежелательные побочные эффекты. Вы хотите издеваться над поведением, вызывающим побочные эффекты, но вы хотите использовать остальную часть реальной логики.
Решением является PartialMock. Это позволяет применять поведение насмешки только к тем членам класса, который вы указали. Вы можете использовать его в нескольких синтаксисах, но самый безопасный и надежный метод - записывать и воспроизводить ожидания, а не вызывать метод Expected () для самого макета.
Мы используем его здесь для ожидания вызова нашего метода, который мы хотим смоделировать; ожидание вызова приведет к тому, что фактический метод не будет вызван. Затем выполняется класс, и используется логика фактического класса (отсюда и утверждение в нашем тесте успешно), но когда достигается вызов нашего ожидаемого метода, то, что на самом деле вызывается, - это фиктивный метод, обновляющий некоторые внутренние счетчики , Затем VerifyAll () подтверждает, что все ожидания произошли в соответствии с заданными настройками.