Когда вы s.TeamAScore++
то у вас есть два различных действия, которые вы должны настроить и проверить. Первое действие получает текущий счет от вашей зависимости, и второе действие устанавливает новый счет:
int score = stateMachine.TeamAScore;
// other staff
stateMachine.TeamAScore = score + 1;
Так что, я бы с явным определением этого взаимодействия с зависимостью:
// Arrange
Mock<IIceHockeyOddsStateMachine> stateMachineMock = new Mock<IIceHockeyOddsStateMachine>();
stateMachineMock.SetupGet(s => s.TeamAScore).Returns(0);
IceHockeyActionLogRecord record = new IceHockeyActionLogRecord { Event = "goal", Team = "A"};
// Act
record.Replay(stateMachineMock.Object);
// Assert
stateMachineMock.VerifySet(s => s.TeamAScore = 1);
В этом случае вы тестируют ваш IceHockeyActionLogRecord, способ взаимодействия с зависимостями. Тест становится спецификацией взаимодействия между объектами.
Когда вы проверяете значение TeamAScore, вы вместо этого проверяете макетную реализацию. Также использование Callback будет проверять ваш код, а не тестировать взаимодействие между объектами.
Кроме того, я хотел бы дать имена для магических чисел внутри теста, или даже обеспечить параметры:
[TestCase(0, 1)]
[TestCase(50, 51)]
public void ShouldIncrementTeamScore(int initialScore, int expectedScore)
{
var stateMachineMock = new Mock<IIceHockeyOddsStateMachine>();
stateMachineMock.SetupGet(s => s.TeamAScore).Returns(initialScore);
IceHockeyActionLogRecord foo = new IceHockeyActionLogRecord();
foo.Replay(stateMachineMock.Object);
stateMachineMock.VerifySet(s => s.TeamAScore = expectedScore);
}
UPDATE: если ваш интерфейс не имеет поглотитель для имущества, а затем просто изменить Устройте часть теста (не свойство установки геттера вызова):
// Arrange
var stateMachineMock = new Mock<IIceHockeyOddsStateMachine>();
var record = new IceHockeyActionLogRecord { Event = "goal", Team = "A"};
// Act
record.Replay(stateMachineMock.Object);
// Assert
stateMachineMock.VerifySet(s => s.TeamAScore = 1);
Смотрите мое обновление для случая, когда свойство имеет только сеттер (кстати, в этом случае лучше использовать метод, чем собственность) –
Великих, спасибо. Я удалил тест редактирования из вопроса, так как понял, что TeamAScore ++ - это глупость для пропеллера с геттером, и я согласен, что опорой с только сеттером должен быть мехтод. –