Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save charlieamat/c4e8f92300279e6380138f7859faab6e to your computer and use it in GitHub Desktop.
Save charlieamat/c4e8f92300279e6380138f7859faab6e to your computer and use it in GitHub Desktop.
Why Is Unit Testing So Hard? - Example 2
public class Powerup : IPowerup
{
public double Multiplier { get; }
}
public class Player
{
private const int MaxPowerups = 4;
private Weapon _weapon;
public List<IPowerup> Powerups { get; } = new List<IPowerup>();
public double Damage => _weapon.Damage * Powerups.Take(MaxPowerups).Sum(p => p.Multiplier);
}
public class PlayerTest
{
[Test]
public void OnePowerupDamage()
{
var weapon = Substitute.For<Weapon>();
weapon.Damage.Returns(1);
var powerup = Substitute.For<IPowerup>();
powerup.Multiplier.Returns(2);
var player = new Player(weapon);
player.Powerups.Add(powerup);
Assert.AreEqual(2, player.Damage);
}
[Test]
public void TwoPowerupDamage()
{
var weapon = Substitute.For<Weapon>();
weapon.Damage.Returns(1);
var powerup = Substitute.For<IPowerup>();
powerup.Multiplier.Returns(2);
var player = new Player(weapon);
player.Powerups.Add(powerup);
player.Powerups.Add(powerup);
Assert.AreEqual(4, player.Damage);
}
[Test]
public void ThreePowerupDamage()
{
var weapon = Substitute.For<Weapon>();
weapon.Damage.Returns(1);
var powerup = Substitute.For<IPowerup>();
powerup.Multiplier.Returns(2);
var player = new Player(weapon);
player.Powerups.Add(powerup);
player.Powerups.Add(powerup);
player.Powerups.Add(powerup);
Assert.AreEqual(6, player.Damage);
}
[Test]
public void FourPowerupDamage()
{
var weapon = Substitute.For<Weapon>();
weapon.Damage.Returns(1);
var powerup = Substitute.For<IPowerup>();
powerup.Multiplier.Returns(2);
var player = new Player(weapon);
player.Powerups.Add(powerup);
player.Powerups.Add(powerup);
player.Powerups.Add(powerup);
player.Powerups.Add(powerup);
Assert.AreEqual(8, player.Damage);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment