如何设置 C# MSTest 单元测试的工作目录?
我在 Linux (Debian Buster) 下使用 VS Code,目前使用 MSTest 框架编写一些单元测试。我的一些测试必须读取我存储在测试项目 NewAppTest 中的文件。 UnitTest1.cs需要读取some_data.json,目录结构:
NewAppTest
+ UnitTest1.cs
+ some_data.json
在UnitTest1.cs中,我使用此代码读取some_data.json:
[TestMethod]
public void GetEmployee()
{
var data = File.ReadAllText("../../../some_data.json");
Assert.IsNotNull(data);
}
令我烦恼的是我需要在文件名前加上“../../../”前缀。当然必须有更好的方法来设置当前工作目录。我用谷歌搜索了一些,发现 这个和这个,但我不明白 它。
我想创建一个像 .runsettings 这样的文件,在其中为项目中的所有测试指定当前工作目录。 我宁愿不必接触每个测试类。
适合我的用例的最小 .runsettings 示例会很好。
I'm using VS Code under Linux (Debian Buster) and currently write some unittests using the MSTest-framework. Some of my tests have to read files that I have stored in my Test-project NewAppTest. UnitTest1.cs needs to read some_data.json, directory structure:
NewAppTest
+ UnitTest1.cs
+ some_data.json
In UnitTest1.cs I use this code to read some_data.json:
[TestMethod]
public void GetEmployee()
{
var data = File.ReadAllText("../../../some_data.json");
Assert.IsNotNull(data);
}
It bugs me that I need to prefix the filename with "../../../". Surely there must be a better way to set the current working dir. I googled some and found this and this, but I don't understand it.
I would like to create a file like said .runsettings where I specify the current working directory for all my tests in the project.
I would rather not have to touch every testclass.
A sample minimal .runsettings befitting my use case would be nice.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在测试应用程序中包含文件的一个好方法是使用嵌入式资源。嵌入式资源与测试版本捆绑在一起,因此它们独立于其位置。
要嵌入文件,请编辑
.csproj
文件并添加以下项目组(作为
的子项):(如果
some_data.json< /code> 位于项目内的子文件夹中,路径为
subfolder/some_data.json
)。要读取嵌入资源,请使用 GetManifestResourceStream :
A good way to include files in your test application is to use embedded resources. Embedded resources are bundled with the test build so they're independent of its location.
To embed a file, edit your
.csproj
file and add the following item group (as a child of<Project>
):(If
some_data.json
is in a subfolder within the project, the path would besubfolder/some_data.json
).To read an embedded resource, use GetManifestResourceStream:
谢谢,这很有效。对于所有正在阅读的人:
我还在测试项目中创建了一个名为“subfolder”的子文件夹,并将 some_data.json 和 more_data.json 放在那里:
在 csproj 中,我添加了它以包含所有文件:
在 TestMethod 中,我用它来读取文件:
这样当您为测试添加新数据文件时,无需编辑 csproj。
Thank you, this worked well. For all who are reading along:
I also created a subfolder named "subfolder" in the Test-Project and put some_data.json and more_data.json in there:
In the csproj I added this to include all files:
In the TestMethod I used this to read the files:
This way you don't need to edit your csproj when you add new data files for your tests.