我让TeamCity运行C#项目。 Unit测试是使用MSTest编写的,它们包含一个外部JSON文件。它们被加载,因为它们很大,我不想在C#中转义它们。
我像这样导入它们:
[TestInitialize]
public void Setup()
{
using (StreamReader r = new StreamReader(@".\currency2.json"))
{
_json = r.ReadToEnd();
}
...
他们在当地运行良好。我有'复制始终设置'但是当使用Teamcity运行测试时,我收到一个错误,说它无法在临时文件夹中找到它们。它们被复制到构建服务器,但它们不在此临时文件夹中。
找不到文件'E:\ TeamCity \ buildAgent \ temp \ buildTmp \ SYSTEM_SERVER 2016-07-18 15_28_19 \ Out \ currency2.json'
我在测试构建步骤中将**\bin\release\*test*.dll
设置为测试文件名。
任何帮助表示感谢。
答案 0 :(得分:1)
我有类似的问题。
我将测试文件的属性更改为此
Teamcity会将文件复制到build文件夹,但它似乎没有保持您期望的相同结构。
所以我创建了一个文件查找循环。这将逐步降低预期的文件夹,直到找到有问题的文本文件。
var pathLookups = new string[]
{
"2ndFolder\\3rdFolder\\test.json", // folder that normally workes
"3rdFolder\\test.json",
"test.json"
};
foreach (var pathLookup in pathLookups)
{
try
{
jsonFileCollection = JsonFileLoader<TestJsonType>.LoadJson(pathLooksup);
if (jsonFileCollection!= null)
{
break;
}
}
catch (Exception)
{
Console.WriteLine("Attempted to load test json from path:" + pathLooksup);
}
}
这不是最干净的解决方案,但它可以完成工作。你可以重构这个看起来更好一些。
答案 1 :(得分:0)
您可以通过参数将完整的pass传递给您的程序(以及TeamCity中定义的值)。
像这样的东西(这只是一个伪代码示例):
string[] programArgs;
static void Main(string[] args)
{
programArgs = args
}
[TestInitialize]
public void Setup()
{
using (StreamReader r = new StreamReader(programArgs[1]))
{
_json = r.ReadToEnd();
}
...
}