#.net #dll #xunit #moles #pex-and-moles
#.net #dll #xunit #родинки #pex-и-родинки
Вопрос:
Я пытаюсь настроить Moles для использования в нашем модульном тестировании. Мы используем xunit, поэтому я являюсь using
расширением Xunit, которое поставляется с moles ( Microsoft.Moles.Framework.Xunit
). Однако, поскольку мы запускаем Xunit 1.7, Moles жалуется, что я не запускаю версию 1.6.1.1521 (с FileLoadException
).
В руководстве по Moles (страница 28) говорится:
xUnit.net Версия:
1.5.0.1479 (для других xUnit.net версии, перекомпилируйте атрибут из исходных текстов)
Вот где я застрял — доступен ли где-нибудь исходный код для этого расширения xunit? Или мне придется использовать конкретную версию xunit, которая требуется Moles?
Ответ №1:
Вы не можете определить перенаправление привязки сборки в moles.runner.exe.config
?
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity
name="xunit.dll"
publicKeyToken="8d05b1bb7a6fdb6c" />
<bindingRedirect oldVersion="1.5.0.1479" newVersion="1.6.1.1521" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
Ответ №2:
Если вам нужно перекомпилировать, вы можете это сделать. Я искал исходный код Moles, но нигде не смог его найти. Затем я попытался разобрать Microsoft.Родинки.Xunit.dll и я понял, что атрибут имеет длину всего в несколько строк.
Исходный код атрибута MoledAttribute:
using System;
using System.Reflection;
using XUnit;
namespace Microsoft.Moles.Framework.Xunit
{
public sealed class MoledAttribute : BeforeAfterTestAttribute
{
// Fields
private IDisposable _molesContext;
public override void Before(MethodInfo methodUnderTest)
{
this._molesContext = MolesContext.Create();
}
public override void After(MethodInfo methodUnderTest)
{
IDisposable disposable = this._molesContext;
if (disposable != null)
{
disposable.Dispose();
}
this._molesContext = null;
}
}
}
Вам следует создать новую библиотеку классов и добавить ссылку на свой xunit.dll любой версии, которую вы хотите. Это должно работать даже с 1.8.0.1545, поскольку я не заметил никаких изменений в xUnit.BeforeAfterTestAttribute, который является единственной зависимостью.
Ответ №3:
Хотя ответ proxon был очень полезен для выполнения моей задачи, позвольте мне представить лучший ответ, который я нашел по мере дальнейшего изучения (надеюсь, помочь другим, столкнувшимся с этой проблемой). Исходный код находится в C:Program FilesMicrosoft MolesDocumentationmoles.samples.zip
. Конечно, в значительной степени идентичный код, который декомпилировал proxon.
Вы также можете найти там оболочки NUnit и MbUnit.