Я только недавно начал использовать ReSharper и ищу способ решения конкретной проблемы с помощью подсказки / быстрого исправления «спецификация аргумента типа». При написании модульных тестов я использовал Assert.AreEqual<string>(x, y)
, а ReSharper помечает использование <string>
как избыточное. Я бы не хотел, чтобы это было помечено как избыточное для того или иного подобного использования в моих модульных тестах. Есть ли способ отключить этот конкретный случай использования (который можно было бы распространить на другие утверждения)? Пожалуйста, обратите внимание, я хотел бы избежать подавления комментариями из-за большого количества шума, который будет создавать в исходном файле. Я также не хочу полностью отключать эту функцию.
Для пояснения, причина, по которой этот конкретный случай неправильно помечен, на мой взгляд, заключается в том, что использование универсального шаблона приводит к тому, что ошибка несовпадающих типов в assert будет помечена во время компиляции, а не во время выполнения теста. Я бы хотел, чтобы это поведение не выполнялось на ранних этапах, но избавляюсь от всего лишнего шума, который он вызывает практически во всех тестах, которые я пишу.
Спасибо
Редактировать: Возник вопрос о том, как будет выглядеть содержимое теста, поэтому я привожу пример одного такого утверждения, которое заставляет ReSharper пометить избыточность.
[TestMethod]
public void ViewModelConstructor_NullProgram_SetsVisibilityToCollapsed()
{
_currentProgram = null; //Set condition under test
var Target = TargetMaker(); //Use shared constructor code in all tests
Assert.AreEqual<System.Windows.Visibility>(System.Windows.Visibility.Collapsed, Target.SectionVisibility);
}
Редактировать 2: Вот пример предложенных изменений до и после ReSharper. Эти два фрагмента кода показывают очень разные результаты. Я отметил различное поведение в именах тестовых функций.
class ClassUnderTest
{
public string fieldUnderTest { get; set; }
public ClassUnderTest()
{
fieldUnderTest = "New Value";
}
}
[TestClass()]
public class ClassUnderTestTest
{
[TestMethod()]
public void ClassUnderTestConstructorTest_FailsTest()
{
ClassUnderTest target = new ClassUnderTest();
Assert.AreEqual(true, target.fieldUnderTest);
}
[TestMethod()]
public void ClassUnderTestConstructorTest_WontCompile()
{
ClassUnderTest target = new ClassUnderTest();
Assert.AreEqual<string>(true, target.fieldUnderTest);
}
}