Intellitest/Pex пытается создать IEqualityComparers для частного поля словаря, доступного только для чтения, в объекте.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Intellitest/Pex пытается создать IEqualityComparers для частного поля словаря, доступного только для чтения, в объекте.

Сообщение Anonymous »

Я создал пустой проект библиотеки классов, содержащий только этот класс.

Код: Выделить всё

public class DictionaryDemo
{
private readonly Dictionary dictionary = new Dictionary();

public void Add(string key, int value)
{
this.dictionary.Add(key, value);
}
}
На основе этого класса я создал тестовый проект с помощью Intellitest. Помимо внесения нескольких правок форматирования для публикации здесь, я не внес никаких изменений в этот тестовый проект. Он содержит только следующий тест Intellitest.

Код: Выделить всё

[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 пытается создавать экземпляры этих типов. Первоначально я предполагал, что 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»