Благодаря AB Kolan это код, который я использовал и работает.
[TestMethod]
public void Should_update_foo_to_active_inside_of_repository()
{
// arrange
var repo = MockRepository.GenerateMock<IRepository>();
var foo = new Foo() { ID = 1, IsActive = false };
var target = new Presenter(repo);
repo.Expect(x => x.ActivateFoo(foo)).
Do(new Func<Foo, bool>(
delegate(Foo f) { f.IsActive = true; return true; }
));
// act
target.Activate(foo);
// assert
Assert.IsTrue(foo.IsActive);
repo.VerifyAllExpectations();
}
Мне не нравится иметь дополнительные методы функций для одноразового использования теста, предпочитая встроенный делегат, если это возможно.
Чтобы решить вопрос, это то, что я должен делать или не так, как дизайн. Поскольку имена там, это не точный код и внутри метода target.Activate (). Код в Activate () выполняет некоторую проверку и, при необходимости, выполняет хранилище ActivateFoo (), а затем проверяет результат этой операции и выполняет другие действия.
Так что, возможно, позже мне придется реорганизовать это и разделить шаги, но сейчас я заставил его работать.
Спасибо