Один из способов проверить это - снять ответственность за работу с шариками, зависящими от цвета, до зависимости, скажем, IBucketHandler :
//Arrange
var bucketHandler = MockRepository.GenerateStub<IBuckerHandler>();
var bucketsOfFun = new BucketGame(bucketHandler);
...
//Assert
bucketHandler.AssertWasCalled(x => x.HaveFunWithABucketOfBalls(redBalls));
bucketHandler.AssertWasCalled(x => x.HaveFunWithABucketOfBalls(greenBalls));
Этот тест затем проверяет, правильно ли BucketGame вызывает HaveFunWithABucketOfBalls для имитируемого объекта. Это может по-прежнему создавать проблемы при указании каждого аргумента. Вы, в свою очередь, можете упростить тестирование (за счет введения большей абстракции), возлагая ответственность за сортировку шаров на новую зависимость. Затем вы получите что-то вроде этого:
//Arrange
var balls = new List<IBall>(); //Can really be anything, we just need the object reference
var greenBalls = new List<IBall>();
var redBalls = new List<IBall>();
var sortedBalls = new [] { greenBalls, redBalls };
var bucketHandler = MockRepository.GenerateStub<IBucketHandler>();
var ballSorter = MockRepository.GenerateStub<IBallSorter>();
ballSorter.Stub(x => x.Sort(balls)).Return(sortedBalls);
var bucketsOfFun = new BucketGame(bucketHandler, ballSorter);
//Act
bucketsOfFun.HaveFunWithBucketsAndBalls(balls);
//Assert
bucketHandler.AssertWasCalled(x => x.HaveFunWithABucketOfBalls(greenBalls));
bucketHandler.AssertWasCalled(x => x.HaveFunWithABucketOfBalls(redBalls));
И чтобы пройти этот тест, в BucketGame :
public BucketGame(IBucketHandler bucketHandler, IBallSorter ballSorter)
{
this.bucketHandler = bucketHandler;
this.ballSorter = ballSorter;
}
public void HaveFunWithBucketsAndBalls(IList<IBall> balls)
{
//group all the balls together according to color
var sortedBalls = ballSorter.Sort(balls);
foreach (var groupOfBalls in sortedBalls)
{
bucketHandler.HaveFunWithABucketOfBalls(groupOfBalls);
}
}
Тестирует логику BucketGame . Теперь вы захотите написать модульные тесты для реализации IBallSorter, чтобы проверить, сортирует ли они шары по цвету, как вам нужно. Эти тесты, вероятно, не будут нуждаться в насмешках, вы просто сможете добавить данные и утверждать, что возвращаемые вами данные - это то, что вы ожидаете.