F #: Как включить данные внешнего теста в модульные тесты mstest - PullRequest
0 голосов
/ 03 января 2019

Я хочу проверить свой код с некоторыми данными, определенными во внешнем файле.Я попробовал следующее:

namespace blub

open System
open Microsoft.VisualStudio.TestTools.UnitTesting

[<TestClass>]
type TestClass () =

    [<TestMethod>]
    member this.TestMethodPassing () =
        let txt = System.IO.File.ReadAllText "data.txt"
        Assert.IsTrue(txt.Contains "Hello");

Я только что создал проект с dotnet new mstest -lang F# и поместил файл data.txt рядом с файлом Test.fs.

project files

Однако, когда я запускаю тесты с dotnet test, я получаю следующую ошибку:

Failed   TestMethodPassing
Error Message:
 Test method blub.TestClass.TestMethodPassing threw exception:
System.IO.FileNotFoundException: Could not find file '/home/peter/Desktop/blub/bin/Debug/netcoreapp2.1/data.txt'.
Stack Trace:
    at Interop.ThrowExceptionForIoErrno(ErrorInfo errorInfo, String path, Boolean isDirectory, Func`2 errorRewriter)
   at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String path, OpenFlags flags, Int32 mode)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options)
   at System.IO.StreamReader..ctor(String path, Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize)
   at System.IO.File.InternalReadAllText(String path, Encoding encoding)
   at System.IO.File.ReadAllText(String path)
   at blub.TestClass.TestMethodPassing() in /home/peter/Desktop/blub/Tests.fs:line 11

Конечно, я могу исправить это, изменив путь на "../../../data.txt",но это не похоже на стабильное решение - я не нашел никакой документации, в которой говорится, как выполнение теста влияет на текущий каталог.

Могу ли я как-то объявить свой тестовый файл как ресурс, который будет скопирован в правильную папку

1 Ответ

0 голосов
/ 04 января 2019

Вам потребуется добавить файл data.txt в fsproj и установить для него значение копировать в выходную папку :

<ItemGroup>
  <Content Include="data.txt">
    <CopyToOutputDirectory>Always</CopyToOutputDirectory>
  </Content>  
</ItemGroup>

Если он все еще не найден, выможет понадобиться использовать [<DeploymentItem("data.txt")>] против TestClass.

. Это позволит скопировать файлы из выходной папки в папку, в которой выполняются тесты.

...