Ударяюсь головой о стену, пытаясь заставить работать действительно простой сценарий тестирования. Я уверен, что упускаю что-то действительно простое!
Что бы я ни делал, я, похоже, получаю следующую ошибку из графического интерфейса NUnit при запуске теста с моей DLL: System.TypeLoadException: Тип 'Castle.Proxies.ITestProxy' из сборки 'DynamicProxyGenAssembly2, версия = 0.0.0.0, Culture = нейтральный, PublicKeyToken = null' пытается реализовать недоступный интерфейс.
Теперь я видел ссылка на эту ошибку в кучах мест при поиске в Stack Overflow и в других местах, но решение, которое я продолжаю находить, похоже, не помогает. И я даже не использую внутренний интерфейс на этом этапе! Решение, которое я вижу в этом месте, тоже помещено в AssemblyInfo.cs следующую строку
[сборка: InternalsVisibleTo ("DynamicProxyGenAssembly2")]
Я использую:
Чтобы воссоздать эту ошибку, все, что мне нужно сделать, это:
Здесь ' После изменения версии Moq с 4.10810.8 на 4.0.10501.6 все работает нормально!
Следующий тест прошел для меня:
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 .
Да, у меня была такая же проблема с Moq.4.0.10810.8 для NET40 ... Когда я перешел на версию 4.0.10531.7, все снова стало зеленым!