protected (Player actual, TOptions options) MakePurchase(Player originalPlayer) { // arrange var player = PlayerFixture.ClonePlayer(originalPlayer); var options = new TOptions(); var mockRandom = Substitute.For <IRandom>(); mockRandom.GetInRange(1, options.MaxValue).Returns(options.MaxValue); var sut = CreateSut( player: player, random: mockRandom, options: options); // act var result = sut.Handle(new TCommand()); // assert result result.Should().BeOfType <OkResult>(result.Message); // assert player state change return(player, options); }