我有一个单元测试项目,其中包含一些用于数据驱动测试的XML文件.这些文件设置为"构建操作内容","如果较新则复制"或"始终复制".
在大多数情况下,这很好.但是,当我更改其中一个数据文件而不更改任何代码时,Visual Studio根本不会触发构建操作,也不会复制任何XML文件.实际上,我正在使用旧数据文件运行我的单元测试.
我可以触发手动构建,但是如果可能的话我想防止这样的错误.有没有办法让Visual Studio(2008)每次只更改内容文件时执行复制操作?
澄清:XML文件位于单元测试项目内,而不是生产代码项目中.我[DeploymentItem]对正在运行的测试中的文件集有一个相关属性.
我正在开发一个应用程序,我已经为它创建了许多单元测试.具有测试类的项目取决于3个第三方DLL.当我转到测试项目的bin\Debug文件夹时,Dll就在那里.但是当我运行测试时,DLL没有被复制到TestResult \\ Out文件夹中.
还有一个我希望复制的另一个项目的log4net.config文件.这个没有出现在测试项目的bin\Debug文件夹中,所以这是我必须解决的另一个问题.
运行单元测试时如何将这些文件复制?
托尼
我正在尝试让MSTest.exe运行,似乎testcontainer没有被正确读取; 而我的测试都在Visual Studio中的所有配置环境中成功运行.
我正在使用的命令是:
"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe" /nologo /usestderr /testSettings:"C:\temp\MyProject\Sources\MyProject\Local.testsettings" /searchpathroot:"C:\temp\MyProject\Binaries" /resultsfileroot:"C:\temp\MyProject\TestResults" /testcontainer:"C:\temp\MyProject\Binaries\MyProject.Services.Server.UnitTests.dll"
Run Code Online (Sandbox Code Playgroud)
testcontainer项目中的项目引用如下所示:
<ItemGroup>
<ProjectReference Include="..\..\Services\MyProject.Services.Server\MyProject.Services.Server.csproj">
<Project>{92EC1999-CC0C-47DD-A4D6-17C3B1233C50}</Project>
<Name>MyProject.Services.Server</Name>
</ProjectReference>
<ProjectReference Include="..\..\SvcConfiguration\MyProject.ServiceConfiguration.Interfaces\MyProject.ServiceConfiguration.Interfaces.csproj">
<Project>{8E2E7BA9-75DB-458E-A184-AC1030EAD581}</Project>
<Name>MyProject.ServiceConfiguration.Interfaces</Name>
</ProjectReference>
<ProjectReference Include="..\..\SvcConfiguration\MyProject.ServiceConfiguration.Services\MyProject.ServiceConfiguration.Services.csproj">
<Project>{39514766-23A8-45DB-96EA-B6B4D9C8B086}</Project>
<Name>MyProject.ServiceConfiguration.Services</Name>
</ProjectReference>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
ServiceConfiguration.Interfaces和ServiceConfiguration.Services DLL都没有放在TestResults的Out文件夹中.
项目GUID在引用和引用的项目之间匹配.
我在命令行中缺少什么?
在我的程序中,我使用SevenZipSharp生成zip文件。SevenZipSharp是一个托管DLL,它将加载另一个DLL 7z.dll。我使用SevenZipCompressor.SetLibraryPath手动将SevenZipSharp的路径设置为7z.dll。
当我在“调试”模式下执行程序时,一切正常,并且生成的zip文件非常好。但是,当我使用mstest执行单元测试时,SevenZipSharp始终会给我以下错误:
“测试方法引发异常:SevenZip.SevenZipLibraryException:无法加载7-zip库或内部COM错误!消息:无法加载库。”
我怀疑MSTest可能正在做某些事情阻止SevenZipSharp能够加载7z.dll,例如在一个安全沙箱中运行(或其他。我是C#和MSTest的新手...)
有谁知道会发生什么事吗?
谢谢!
我正在使用 VS2008 TFS(使用 MSTest)。
我有一个可靠的单元测试,它依赖于项目子文件夹中的数据文件(即 testproject1\TestData)。数据文件属性为 Build Action=Content,Copy Always。(它不是这样的测试数据文件,而是生产代码读取并通常在其自己的文件夹中期望的文件)
当测试构建并执行时,数据文件被正确复制到...\TestResults\(testruniD)\Out 文件夹中,测试代码找到它。
现在,我将测试及其数据文件移动到解决方案中的另一个测试项目(它真正应该在的位置),数据文件位于与新测试项目 (testproject2\TestData) 和数据文件属性相同的文件夹中被检查为仍然如上。但是,在重新构建时,测试在新位置失败,因为数据文件尚未复制到测试结果输出文件夹,因此执行代码无法找到它。
我应该做些什么来确保仍然复制数据文件?
我之前遇到过一个相关的问题,一些数据文件被复制到测试结果输出文件夹,而有些则没有,没有明显的原因,这让我感到困惑。
TIA
我有一个log4net的包装类来记录一组dll库中的多个类和程序集.(这可能是设计不佳,但是......不要问)代码基本上是这样的:
public static class Logger
{
private static ILog log;
static Logger()
{
log = LogManager.GetLogger("abcd");
XmlConfigurator.Configure(new FileInfo("LoggerConfig.log4net"));
log.Info("=== NEW SESSION ===");
}
public static void Log(string message)
{
log.Debug(message);
}
}
Run Code Online (Sandbox Code Playgroud)
现在..如果静态构造函数是一个简单可执行文件的静态主程序,这很好用(我很快就制作了一个控制台应用程序来测试它).但在这里却没有.由于我处理独立程序集而不是可执行程序,因此我可以轻松测试记录程序的唯一方法是通过MSTest.这可能是导致此问题的原因.我不是100%肯定,如果它可能根本找不到配置文件.它在编译时被复制并且与包含记录器类的程序集位于同一文件夹中,所以我认为应该可行.
bleh ..卡住了三个小时.:T有什么建议吗?