당신이 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 값을 확인할 때 모의 구현을 테스트하고 있습니다. 또한 콜백을 사용하면 객체 간의 상호 작용을 테스트하는 대신 코드를 테스트 할 수 있습니다.
또한, 나는 테스트 내부에 매직 넘버의 이름을 줘야 할 것, 또는 매개 변수를 제공합니다
[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);
은 (재산보다 BTW 방법을 사용하는 것이 더이 경우)의 경우 내 업데이 트를 참조하십시오 –
좋아요, 감사합니다. 나는 TeamAScore ++가 게터가없는 소품에 대해 말도 안된다는 것을 깨달았을 때 질문에서 편집 테스트를 제거했으며, 오직 세터 만이 mehtod가되어야하는 소품에 동의합니다. –