I'm currently in the process of refactoring an old poker game which violates many of the SOLID principles.
I was trying to use the TDD approach to refactoring and I found myself having to hard code a player's hand every time I wrote a unit test for a specific poker hand check.
For example, here are the unit tests for a one pair poker hand check:
[Test]
public void OnePair_IsLowPair_ReturnsTrue()
{
SuperCard[] testHand =
{
new CardClub(Rank.Ace),
new CardSpade(Rank.Ace),
new CardDiamond(Rank.Five),
new CardHeart(Rank.Jack),
new CardClub(Rank.Three)
};
bool result = PokerHandEvaluator.OnePair(testHand);
Assert.That(result == true);
}
[Test]
public void OnePair_IsLowerMiddlePair_ReturnsTrue()
{
SuperCard[] testHand =
{
new CardClub(Rank.Eight),
new CardSpade(Rank.Ace),
new CardDiamond(Rank.Ace),
new CardHeart(Rank.Jack),
new CardClub(Rank.Three)
};
bool result = PokerHandEvaluator.OnePair(testHand);
Assert.That(result == true);
}
[Test]
public void OnePair_IsHigherMiddlePair_ReturnsTrue()
{
SuperCard[] testHand =
{
new CardClub(Rank.Jack),
new CardSpade(Rank.Queen),
new CardDiamond(Rank.Ace),
new CardHeart(Rank.Ace),
new CardClub(Rank.Three)
};
bool result = PokerHandEvaluator.OnePair(testHand);
Assert.That(result == true);
}
[Test]
public void OnePair_IsHighPair_ReturnsTrue()
{
SuperCard[] testHand =
{
new CardClub(Rank.Jack),
new CardSpade(Rank.Deuce),
new CardDiamond(Rank.Six),
new CardHeart(Rank.Ace),
new CardClub(Rank.Ace)
};
bool result = PokerHandEvaluator.OnePair(testHand);
Assert.That(result == true);
}
This is what the class diagram (at the project's current stage) looks like:
My question is how I should go about extracting a method (or methods) out of the testHand initialization.