Пересмотрено ... это проходит:
public class Bar
{
public virtual void SomeMethod(string param)
{
//whatever
}
}
public interface IBarRepository
{
List<Bar> GetBarsFromStore();
}
public class FooService
{
private readonly IBarRepository _barRepository;
public FooService(IBarRepository barRepository)
{
_barRepository = barRepository;
}
public List<Bar> GetBars()
{
var bars = _barRepository.GetBarsFromStore();
foreach (var bar in bars)
{
bar.SomeMethod("someValue");
}
return bars;
}
}
[TestMethod]
public void Verify_All_Bars_Called()
{
var myBarStub = new Mock<Bar>();
var mySecondBarStub = new Mock<Bar>();
var myBarList = new List<Bar>() { myBarStub.Object, mySecondBarStub.Object };
var myStub = new Mock<IBarRepository>();
myStub.Setup(repos => repos.GetBarsFromStore()).Returns(myBarList);
var myService = new FooService(myStub.Object);
myService.GetBars();
myBarStub.Verify(bar => bar.SomeMethod(It.IsAny<string>()), Times.Once());
mySecondBarStub.Verify(bar => bar.SomeMethod(It.IsAny<string>()), Times.Once());
}
Обратите внимание на небольшое изменение в классе Bar (SomeMethod () является виртуальным). Изменение, но не с участием флага ...:)
Теперь, с точки зрения более широкого дизайна, в вашем баре происходит некоторая мутация (что бы ни делал "SomeMethod ()"). Лучше всего было бы убедиться, что эта мутация произошла на каждой панели, возвращаемой из FooService.GetBars (). То есть настройте свою заглушку репозитория так, чтобы она возвращала несколько баров, а затем убедитесь, что какая-либо мутация выполняется SomeMethod (). В конце концов, вы контролируете столбцы, которые будут возвращены, поэтому вы можете установить их состояние pre-SomeMethod (), а затем проверить их состояние post-SomeMethod ().