Код: Выделить всё
public class DictionaryDemo
{
private readonly Dictionary dictionary = new Dictionary();
public void Add(string key, int value)
{
this.dictionary.Add(key, value);
}
}
Код: Выделить всё
[PexClass(typeof(DictionaryDemo)), TestClass]
public partial class DictionaryDemoTest
{
[PexMethod]
public void AddTest([PexAssumeUnderTest] DictionaryDemo target, string key, int value)
{
target.Add(key, value);
}
}


Сами по себе сгенерированные тесты кажутся разумными . Я не уверен, означает ли низкий охват необходимость создания дополнительных тестов для охвата сложностей словаря, или это связано с указанными ниже проблемами.
Моя обеспокоенность вытекает из предупреждений. Я не понимаю, почему Intellitest пытается создавать экземпляры этих типов. Первоначально я предполагал, что Intellitest пытается установить поле словаря и использует эти экземпляры для создания экземпляра нового словаря. Это было нежелательное поведение, поэтому я добавил атрибут [PexExplorableFromConstructor(typeof(DictionaryDemo))], который должен (я считаю) предотвращать любую прямую установку частных полей, но помимо предупреждения о том, как создать DictionaryDemo исчезли, результаты были идентичными.
Стоит отметить, что многие типы, которые он пытается создать здесь, даже не являются доступен.
Итак, вопрос в том, что здесь происходит? Это предполагаемое поведение для Intellitest? Если Intellitest пытается установить поле словаря, это нежелательное поведение. Как мне остановить это и почему [PexExplorableFromConstructor] не останавливает это? Если это не то, почему он пытается использовать все эти типы?
Дополнительные сведения Я уже пробовал
Я безуспешно поигрался с кучей атрибутов PexCreatable... и PexExplorable..., включая [PexCreatableByConstructor(typeof(DictionaryDemo) ), MaySetRemainingFieldsByReflection = false)], что, похоже, должно явно запрещать настройку поля.
Я пробовал создать фабрику для DictionaryDemo с тем же результатом.
Я пробовал добавить [PexExplorableFromConstructor(typeof(Dictionary))], но это также не оказало никакого эффекта.
Это поведение одинаково в VS 2015 и VS 2017 RC.
Подробнее здесь: https://stackoverflow.com/questions/417 ... e-readonly