AutoFixture 2 с () не работает, как это было в AutoFixture 1? - PullRequest
4 голосов
/ 10 января 2011

Я портирую свои тесты на AutoFixture 2.0 , и я столкнулся с каким-то странным поведением, которое я не могу ни объяснить, ни исправить. Этот простой тест провалился для меня:

var autoFixtures = new Fixture();
var file = autoFixtures.Build<File>()
                       .With(f => f.Name, "bleh.txt")
                       .CreateAnonymous();

Assert.That(file.Name, Is.EqualTo("bleh.txt"));  // Fail?!

Тест завершается успешно, если я изменяю Name на другое свойство File, что заставляет меня думать, что у меня есть какая-то настройка для Name, которая не работала, когда я использовал AutoFixture 1.0. Однако я проверил свой код и ничего подобного не могу найти.

Включение трассировки не очень помогает.

autoFixtures.Behaviors.Add(new TracingBehavior());

отображает, помимо прочего:

Requested: System.String Name
    Requested: Ploeh.AutoFixture.Kernel.SeededRequest
    Created: Ploeh.AutoFixture.Kernel.NoSpecimen
  Requested: Ploeh.AutoFixture.Kernel.SeededRequest
    Requested: System.String
    Created: Ploeh.AutoFixture.Kernel.NoSpecimen
    Requested: System.String
    Created: 8a022fda-fa4e-49b7-b0c2-285fef765386
  Created: Name8a022fda-fa4e-49b7-b0c2-285fef765386
Created: Name8a022fda-fa4e-49b7-b0c2-285fef765386

FWIW, Name объявляется как виртуальное свойство базового класса File, а затем переопределяется в File следующим образом:

public abstract class Item
{
    public virtual string Name { get; set; }
    ...
}

public class File : Item
{
    public override string Name { get; set; }
    ...
}

Если у кого-нибудь есть какие-либо идеи о том, что я мог бы попробовать, или где-то, что я мог непреднамеренно настроить поведение свойства Name, я был бы очень признателен!

1 Ответ

5 голосов
/ 11 января 2011

Вы только что обнаружили ошибку в AutoFixture 2.0. Теперь я решил его и отправил изменения в репозиторий (changeset 3efe812aecd1), поэтому, если вы загрузите последний источник и скомпилируете его, он должен работать.

В случае, если вас это заинтересовало, это было связано с тем, что дочерний класс переопределял виртуальное свойство - очевидно, это не то, что я делаю очень часто.

Извините за ошибку. Пожалуйста, дайте мне знать, если проблема не была решена, или если у вас есть другие вопросы.

...