Итак, я сделал следующий тест для класса Board
, который должен был родиться:
[TestMethod]
public void Set_The_Origin_As_Violet_And_The_Query_Confirms_It() {
Board board = new Board(10, 10);
Color expected = Color.Violet;
board.SetColorAt(0, 0, expected);
Color actual = board.GetColorAt(0, 0);
Assert.AreEqual(expected, actual);
}
Я попытался запустить код, но компилятор дал понять, что Board
не существует. И я его создал.
Я попытался запустить код еще раз, но он оказался бесполезным, так как методов SetColorAt () и GetColorAt () не было. Я создал их:
public void SetColorAt(int x, int y, Color color) {
}
public void GetColorAt(int x, int y) {
}
Тем не менее, не все было хорошо, так как мне пришлось вернуть Color.Violet. Поэтому я изменил GetColorAt () на
public void GetColorAt(int x, int y) {
return Color.Violet;
}
Итак, я впервые получил зеленый свет.
То, что я хочу, чтобы мой окончательный код был на доске классов, имеет вид:
public class Board
{
private Color[,] board;
public Board(int x, int y)
{
board = new Color[x, y];
}
public void SetColorAt(int x, int y, Color color) {
board[x, y] = color;
}
public Color GetColorAt(int x, int y) {
return board[x, y];
}
}
Мой первый вопрос ...
как туда добраться? Могу ли я считать, что на этапе «рефакторинга» модульного теста, который я показал выше, при удалении дублирования я в конечном итоге получу этот код?
Если ответ положительный, я чувствую, что мой модульный тест тестирует что-то слишком «локализованное» для того, что на самом деле делает код. Видите ли, тест проверяет только 1 пиксель и один цвет, а сам код более сложный и насыщенный.
Может быть, решение было бы добавить больше юнит-тестов? Что бы вы посоветовали сделать?
Мой второй вопрос ...
Я знаю позже, я хочу иметь IBoard
. Должен ли я просто выразить это в приведенном выше модульном тесте? Должен ли я позволить
Board board = new Board(10, 10);
как есть и все еще создавать интерфейс IBoard
? Как с этим бороться?