MissingMethodException при использовании утверждений Unquote

Я пытаюсь использовать unquote с NUnit в качестве средства запуска теста. Тестовый пример взят из Начало работы и работает должным образом при запуске вне NUnit. :

namespace FsTest.Tests

open NUnit.Framework
open Swensen.Unquote

[<TestFixture>]
module Example =

    [<Test>]
    let foo() = 
        test <@ (1+2)/3 = 1 @>

В NUnit я получаю это исключение:

FsTest.Tests.Example.foo: System.MissingMethodException: метод не найден: «System.Tuple2<Microsoft.FSharp.Collections.FSharpList1,Microsoft.FSharp.Quotations.FSharpExpr> Internal.reduceFullyAndGetLast(Microsoft.FSharp.Quotations.FSharpExpr)».

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


person Serge Belov    schedule 12.12.2012    source источник
comment
Не могли бы вы уточнить, что вы подразумеваете под запуском вне NUnit и под NUnit? Эта проблема очень похожа на stackoverflow.com/q/7828852/236255, за исключением средства запуска тестов с графическим интерфейсом xUnit.net, где ОП узнал, что ссылается на неправильную версию FSharp.Core.dll.   -  person Stephen Swensen    schedule 12.12.2012
comment
запускать вне NUnit означает использовать F# Interactive или приложение командной строки из того же решения; Под NUnit означает использование стандартного графического интерфейса пользователя NUnit 2.6.2, загруженного в виде zip-файла. Ссылка на FScharp.Core.dll из тестовой сборки: <Reference Include="FSharp.Core, Version=4.3.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">. Все дело в VS 2012, ориентированном на .NET 4.5.   -  person Serge Belov    schedule 12.12.2012


Ответы (1)


Основываясь на описании вашей проблемы, я подозреваю, что вам необходимо настроить проект NUnit с перенаправлением привязки FSharp.Core с версии 4.0.0.0 на версию 4.3.0.0, поскольку последняя версия Unquote создана для .NET 4.0, а ваш тестовый проект нацелен на . НЕТ 4.5.

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

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <runtime>
    <legacyUnhandledExceptionPolicy enabled="true" />
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity
          name="FSharp.Core"
          publicKeyToken="b03f5f7f11d50a3a"
          culture="neutral"/>
        <bindingRedirect
          oldVersion="2.0.0.0"
          newVersion="4.3.0.0"/>
        <bindingRedirect
          oldVersion="4.0.0.0"
          newVersion="4.3.0.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

Я не уверен, где именно вам нужно поместить это для проекта NUnit, но, возможно, в файле конфигурации, указанном через Редактор проекта?

К сожалению, у меня не установлен VS2012, поэтому я несколько ограничен в своей способности действительно диагностировать эту проблему для вас.

person Stephen Swensen    schedule 12.12.2012
comment
Отлично, помогло, спасибо. Для тех, кому интересно, NUnit использует <TestAssemblyName>.dll.config для настройки тестовых библиотек DLL, так что именно туда вы помещаете эти настройки. - person Serge Belov; 13.12.2012