Рассмотрим:Как написать единичный тест для «T должен быть ссылочным типом»?
class MyClass<T> where T : class
{
}
В этом случае, где положение является соблюдение спецификации, что МойКласс является лишь общим ссылочного типа.
В идеале я должен иметь единичный тест, который проверяет эту спецификацию. Тем не менее, этот тест блок явно не будет работать, но это объясняет то, что я пытаюсь выполнить:
[Test]
[DoesNotCompile()]
public void T_must_be_a_reference_type()
{
var test = new MyClass<int>();
}
Что я могу сделать, чтобы проверить спецификацию, которая реализована, не позволяя код для компиляции?
EDIT:
Подробнее: Итак, мое рассуждение для этого (ха-ха) является то, что я по методологии TDD, в которой вы не можете писать любой код, если у Вас нет неудачный единичный тест. Допустим, у вас было это:
class MyClass<T> { }
Какой тест вы можете написать, если бы не T-класс? Что-то вроде default(T) == null
?
Далее EDIT:
Таким образом, после «анализа первопричин» на это, проблема в том, что я полагался на default(T)
будучи null
в потребителя этого класса, в неявном виде. Я смог реорганизовать этот потребительский код в другой класс и указать там ограничение общего типа (ограничение его на class
), что фактически делает этот код не скомпилированным, если кто-то должен был удалить ограничение на класс, о котором я говорю выше.
Почему вы не тестируете модуль, что класс называется MyClass? – SLaks
@SLaks: технически var test = new MyClass(); испытал бы это, не так ли? –
Я думаю, что @SLaks использовал сарказм, чтобы доказать, что вам не нужно тестировать компилятор ... это работа Microsoft. – TheCloudlessSky