Возникли проблемы Начало работы с Moq и Nunit

Ударяюсь головой о стену, пытаясь заставить работать действительно простой сценарий тестирования. Я уверен, что упускаю что-то действительно простое!

Что бы я ни делал, я, похоже, получаю следующую ошибку из графического интерфейса NUnit при запуске теста с моей DLL: System.TypeLoadException: Тип 'Castle.Proxies.ITestProxy' из сборки 'DynamicProxyGenAssembly2, версия = 0.0.0.0, Culture = нейтральный, PublicKeyToken = null' пытается реализовать недоступный интерфейс.

Теперь я видел ссылка на эту ошибку в кучах мест при поиске в Stack Overflow и в других местах, но решение, которое я продолжаю находить, похоже, не помогает. И я даже не использую внутренний интерфейс на этом этапе! Решение, которое я вижу в этом месте, тоже помещено в AssemblyInfo.cs следующую строку

[сборка: InternalsVisibleTo ("DynamicProxyGenAssembly2")]

Я использую:

  • Visual Studio 2010 Professional
  • c # 4.0
  • Moq 4.10810.8 Beta (развернут бин)
  • NUnit 2.5.5 (установлен в GAC)

Чтобы воссоздать эту ошибку, все, что мне нужно сделать, это:

  1. Создать новый проект библиотеки классов
  2. Ссылка Moq и Unit (как указано выше)
  3. интерфейс. Я назвал свой интерфейс ITest, сделал его общедоступным, и у него есть один метод - string TestMethod (); Я делаю это в локальном проекте для простоты.
  4. Создайте класс с именем «Testing», украшенный [TextFixture], и ​​метод теста с именем «TestMethod», украшенный [Test]
  5. . Создайте проект, затем запустите NUnit против результирующий DLL в папке отладки.

Здесь ' После изменения версии Moq с 4.10810.8 на 4.0.10501.6 все работает нормально!

14
задан Brendan 13 August 2010 в 03:43
поделиться

2 ответа

Следующий тест прошел для меня:

public interface ITest { string TestMethod(); }

public class Testing
{
    [Test]
    public void TestMethod()
    {
        var testMock = new Mock<ITest>();
        testMock.Setup(x => x.TestMethod()).Returns("String val");
        var xyz = testMock.Object;

        Assert.AreEqual(1, 1);
    }
}

Если ваш интерфейс является общедоступным и находится в той же сборке, проблем действительно возникнуть не должно. Я подозреваю, что вы просто где-то пропустили ключевое слово доступности, поскольку непубличный интерфейс действительно вызывает ошибку времени выполнения, потому что проксирующая сборка не сможет создать экземпляр типа на его основе.

Вероятно, лучше всего начать с кода, который я предоставил, и менять по одному, пока он не совпадет с вашим ошибочным кодом. Если вы запускаете свой тест между каждым изменением, я полагаю, вы обнаружите, чего не хватало.

Если вы все же вернетесь к внутреннему интерфейсу, обратите внимание, что ваш оператор InternalsVisibleTo должен находиться в той же сборке, что и ваш внутренний интерфейс, не в тестовой сборке. Также обратите внимание, что если ваша сборка имеет строгое имя , вам может потребоваться добавить отпечаток открытого ключа в ваш оператор InternalsVisibleTo , как , описанный в MSDN .

6
ответ дан 1 December 2019 в 15:11
поделиться

Да, у меня была такая же проблема с Moq.4.0.10810.8 для NET40 ... Когда я перешел на версию 4.0.10531.7, все снова стало зеленым!

4
ответ дан 1 December 2019 в 15:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: