Jur*_*uri 94 c# unit-testing mstest visual-studio deploymentitem
我目前正在维护一个用C#.net编写的"旧"系统,删除一些过时的功能并进行一些重构.感谢上帝,前一个人写了一些单元测试(MSTests).我对JUnit测试很满意,但对MSTests没有太多帮助.
测试方法有一个DeploymentItem属性,指定一个文本文件,该文件由正在测试的业务逻辑方法解析,而第二个DeploymentItem只指定了一个包含一堆必须部署的TIF文件的路径.
[TestMethod()]
[DeploymentItem(@"files\valid\valid_entries.txt")]
[DeploymentItem(@"files\tif\")]
public void ExistsTifTest()
{
...
}
Run Code Online (Sandbox Code Playgroud)
测试工作之前,但现在我不得不更改\ files\tif目录中包含的TIF文件的名称.根据规则,TIF文件名必须匹配特定模式,该模式也由ExistsTifTest()方法检查.现在我不得不更改文件名以使它们适应新的要求,突然之间不再像以前一样部署TIF文件.
有人能给我一个暗示,为什么会发生这种情况或可能是什么原因?如果我在\ files\valid \目录中的"valid_entries.txt"旁边添加一个新的文本文件"my2ndTest.txt",并在测试方法上使用相应的DeploymentItem属性,也会发生同样的事情.该文件未部署?
我通过直接在testrunconfig中定义部署路径来获得现在部署的映像,但我想了解为什么会发生这些事情,或者为什么我的新文件"my2ndTest.txt"在其他人没有部署时会被部署.
Mar*_*eck 106
DeploymentItem 有点乱.
解决方案中的每个文件都将在VS.NET中具有"复制到输出文件夹"设置.您需要将其设置为"始终复制"(或类似)才能将文件放入输出文件夹.
检查您是否为新文件设置了此项.如果你没有这个设置,那么文件将不会被复制到输出文件夹,然后它们无法从输出文件夹部署到MSTest所做的文件夹.
就个人而言,如果我有单元测试所需的文件,我发现将这些文件作为资源嵌入到程序集中,并且在测试期间让该程序集"解包",这是一种更可预测的处理方式.因人而异.
注意:这些评论是基于我对VS2010的体验.对我的回答的评论表明这不是VS2012的问题.我仍然坚持认为使用嵌入式资源需要较少的"魔力",对我而言,使我的单元测试的"排列"阶段更加明确.
小智 74
在VS2010中,我的Local.testsettings未选中"启用部署",并且DeploymentItem属性不起作用.我查了一下,一切正常.我希望这有帮助!
小智 17
我也面临类似的问题,但我找到了简单的3步解决方案:
假设您的文件夹结构如下所示:
SolutionFolder\
TestProjectFolder\
SubFolder\
[DeploymentItem(@"TestProjectFolder\SubFolder")]将所有内容部署<SubFolder>到Test Run目录[DeploymentItem(@"TestProjectFolder\SubFolder", "TargetFolder")] 到的所有内容部署<SubFolder>到<TargetFolder>在测试运行目录关于MSTest的最后一点说明(至少对于VS2010):
如果你希望它<TargetFolder>具有与之相同的名称,则当MSTest运行器遇到愚蠢的边缘情况时<SubFolder>,使用[DeploymentItem(@"SubFolder", @"SubFolder")]将无声地失败.这就是为什么你应该<SubFolder>使用<TestProjectFolder>as作为前缀:[DeploymentItem(@"TestProjectFolder\SubFolder", @"SubFolder")]
Pet*_* K. 14
希望能帮助其他人:我在这里尝试了所有建议,但我的部署项目仍未被复制.
我必须做的(如此处所建议的)是在DeploymentItem属性中添加第二个参数:
[DeploymentItem(@"UnitTestData\TestData.xml", "UnitTestData")]
Run Code Online (Sandbox Code Playgroud)
这可能与您的确切问题无关,但这里有一些我在[DeploymentItem]属性中找到的提示.
它不与[TestInitialize]属性使用时工作
[TestInitialize]
[DeploymentItem("test.xlsx")]
public void Setup()
{
Run Code Online (Sandbox Code Playgroud)
它应该在你的[TestMethod]上,例如
[TestInitialize]
public void Setup()
{
string spreadsheet = Path.GetFullPath("test.xlsx");
Assert.IsTrue(File.Exists(spreadsheet));
...
}
[TestMethod]
[DeploymentItem("test.xlsx")]
public void ExcelQuestionParser_Reads_XmlElements()
{
...
}
Run Code Online (Sandbox Code Playgroud)
在尝试了这里列出的所有其他建议后,我仍然无法弄清楚发生了什么.最后,我发现在"测试/测试设置"菜单下没有选择任何设置文件,这意味着未启用部署.我点击了测试/测试设置/选择测试设置文件菜单项,选择了Local.TestSettings文件,然后一切正常.
DeploymentItem.很难正确设置,并且它不适用于我的 ReSharper 测试运行程序,也不适用于 Visual Studio 2017 中 MSTEST 的本机测试运行程序。
相反,右键单击您的数据文件,然后选择properties。选择复制到输出目录:始终。
现在在你的测试中,这样做。该目录只是文件相对于测试项目的目录。简单。
[TestMethod()]
public void ParseProductsTest()
{
// Arrange
var file = @"Features\Products\Files\Workbook_2017.xlsx";
var fileStream = File.Open(file, FileMode.Open);
// etc.
}
Run Code Online (Sandbox Code Playgroud)
这似乎适用于自动化构建和测试系统。
| 归档时间: |
|
| 查看次数: |
74676 次 |
| 最近记录: |