У меня есть класс, который содержит двухмерный массив другого объекта. Он имеет один конструктор, но внутри этот массив инициализируется всегда нулями. Таким образом, Others
не инициализируется быть справедливым:Должен ли я создавать новый конструктор только для тестовых целей?
public class FirstClass
{
public OtherClass[,] Others { get; set; }
...
}
public class OtherClass
{
public int Id { get; set; }
}
Этот массив Others
заполняется во время выполнения. Теперь я хотел бы написать тест, который будет проверять некоторые операции, когда заполняется Others
. Поэтому мне нужно передать образцы массивов методам тестирования. Я не хочу создавать массивы OtherClass
, потому что у многих из этих образцов массивов и мне придется написать:
OtherClass[][,] samples = new[]
{
new OtherClass[,]
{
{ new OtherClass() { Id = 2 };,new OtherClass() { Id = 2 };,new OtherClass() { Id = 2 };,new OtherClass() { Id = 2 };,new OtherClass() { Id = 2 };,new OtherClass() { Id = 2 };,new OtherClass() { Id = 2 };},
{ new OtherClass() { Id = 2 };,new OtherClass() { Id = 2 };,new OtherClass() { Id = 2 };,new OtherClass() { Id = 2 };,new OtherClass() { Id = 2 };,new OtherClass() { Id = 2 };,new OtherClass() { Id = 2 };},
etc..
некрасиво!
Так что в моем Tests
проекте я создал массив только целых чисел (Id
ы):
int[][,] samples = new[]
{
new int[,]
{
{1,0,0,0,0,0,0},
{0,2,0,0,0,0,0},
{0,0,3,0,0,0,0},
{0,0,0,4,0,0,0}
},
new int[,]
{
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{1,2,3,4,5,6,7},
{0,0,0,0,0,0,0}
}
};
гораздо более удобным для чтения ... но теперь мне нужно создать конструктор для FirstClass
, который принимает в качестве параметра int[,]
и создайте OtherClass [,] с идентификаторами из параметра.
Теоретически я должен быть хорошим, потому что тест будет выглядеть так:
[TestFixture]
class BoardTests
{
[Test]
[TestCaseSource("samples")]
public void FirstTest(int[,] board)
{
FirstClass aClass = new FirstClass(board);
//Test an operation on aClass
}
}
Итак, мой вопрос: Это хорошая практика, чтобы создать дополнительный конструктор ТОЛЬКО для испытаний? Я не буду использовать этот конструктор в производственном коде. Или у вас есть лучшее решение?
Вопрос только в том случае, если «Другие» выставлены как открытое свойство, так почему бы не просто инициализировать его любыми значениями, которые вы хотите в своем тесте? – Thangadurai
Вы можете создать отдельный класс, который делает сопоставление между int [,] и другим [] (тот же код, который вы собираетесь писать в новом конструкторе). Таким образом вы отделяете логику. – ssimeonov