Я пишу карточную игру в попытке изучить Silverlight.
У меня есть доменное представление игры, которая предоставляется Silverlight в качестве службы WCF, и единственный открытый метод для моего объекта Game - это «PlayCards». Какой метод выглядит следующим образом
public void PlayCards(Guid playerId, List<Card> cards)
Когда этот метод вызывается, объект Game обновляется и передается всем клиентам с использованием дуплексной привязки
Есть много сценариев, которые мне нужны для модульного тестирования (выполнение его через пользовательский интерфейс становится действительно утомительным, особенно учитывая, что существует множество сценариев, которые не часто встречаются в природе). Однако сделать это означало бы сделать доступными различные свойства, которые на самом деле не нужны (за исключением моих целей тестирования)
Вот некоторые особенности:
У меня есть игровой класс, который содержит список игроков:
public class Game
{
public List<Player> Players
{
get { return _players; }
}
...
В классе Игрока есть Рука
public class Player
{
public Hand Hand { get; internal set; }
...
Класс Hand состоит из различных частей
public class Hand
{
public List<Card> FaceDownCards { get; internal set; }
public List<Card> FaceUpCards { get; internal set; }
public List<Card> InHandCards { get; internal set; }
Теперь в своих юнит-тестах я хочу установить различные сценарии, в которых у одного игрока есть определенные карты, а у следующего игрока есть определенные карты. Затем пусть первый игрок сыграет несколько карт (с помощью общедоступного метода PlayCards), а затем подтвердит состояние игры
Но, конечно, так как Players - это свойство только для чтения, я не могу этого сделать. Точно так же Рука (на Игроке) недоступна. Точно так же части руки.
Есть идеи, как мне это настроить?
Полагаю, это может означать, что мой дизайн неправильный?
спасибо
EDIT:
Вот как выглядят некоторые классы, чтобы дать вам представление о некоторых свойствах, на которые я хочу заявить после того, как карты были разыграны
Пока я экспериментирую с InternalsToVisible, я изменил частные сеттеры на внутренние, но меня интересует, как будет работать чистый TDD
public class Game
{
public List<Player> Players { get; internal set; }
public Deck Deck { get; internal set; }
public List<Card> PickUpPack { get; internal set; }
public CardList ClearedCards { get; internal set; }
public Player CurrentPlayer
{
get
{
return Players.SingleOrDefault(o => o.IsThisPlayersTurn);
}
}
internal Direction Direction { get; set; }
..
public class Player
{
public Guid Id { get; internal set; }
public Game CurrentGame { get; internal set; }
public Hand Hand { get; internal set; }
public bool IsThisPlayersTurn { get; internal set; }
public bool IsAbleToPlay { get; internal set; }
public string Name { get; internal set; }
...
public class Hand
{
public List<Card> FaceDownCards { get; internal set; }
public List<Card> FaceUpCards { get; internal set; }
public List<Card> InHandCards { get; internal set; }
...