C# Teamcity—编写访问单独JSON文件的测试

C# Teamcity—编写访问单独JSON文件的测试,c#,json,unit-testing,teamcity,C#,Json,Unit Testing,Teamcity,我让TeamCity负责一个C#项目。单元测试是使用MSTest编写的,它们包括一个外部JSON文件。它们被加载是因为它们很大,我不想用C#逃脱它们 我这样导入它们: [TestInitialize] public void Setup() { using (StreamReader r = new StreamReader(@".\currency2.json")) { _json = r.ReadToEnd(); } ... 它们在当地运行良好。我有“复制始终设置”

我让TeamCity负责一个C#项目。单元测试是使用MSTest编写的,它们包括一个外部JSON文件。它们被加载是因为它们很大,我不想用C#逃脱它们

我这样导入它们:

[TestInitialize]
public void Setup()
{
  using (StreamReader r = new StreamReader(@".\currency2.json"))
  {
    _json = r.ReadToEnd();
  }
  ...
它们在当地运行良好。我有“复制始终设置”,但当使用Teamcity运行测试时,我收到一个错误,说明它无法在临时文件夹中找到它们。它们已复制到生成服务器,但不在此临时文件夹中

找不到文件“E:\TeamCity\buildAgent\temp\buildTmp\SYSTEM\u SERVER 2016-07-18 15\u 28\u 19\Out\currency2.json”

在测试构建步骤中,我将
***\bin\release\*test*.dll设置为我的测试文件名


感谢您的帮助。

您可以将完整的pass by参数传递给您的程序(以及TeamCity中定义的值)

类似这样的内容(这只是一个伪代码示例):


我也有类似的问题

我将测试文件的属性更改为

  • 构建操作=内容
  • 复制到输出目录=始终复制
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);
            }
        }
var pathLookups=新字符串[]
{
“2ndFolder\\3rdFolder\\test.json”,//正常工作的文件夹
“3rdFolder\\test.json”,
“test.json”
};
foreach(pathLookup中的变量pathLookup)
{
尝试
{
jsonFileCollection=JsonFileLoader.LoadJson(pathLooksup);
if(jsonFileCollection!=null)
{
打破
}
}
捕获(例外)
{
WriteLine(“试图从路径“+pathLooksup”加载测试json);
}
}

这不是最干净的解决方案,但它可以完成任务。您可以对其进行重构,使其看起来更美观。

错误消息是关于
currency2.json
的,而您的代码示例是关于
currency1.json
的,这正常吗。也许,
currency1.json
被设置为复制本地,但不是
currency2.json
?抱歉,这有点误导。打字错误它找不到任何文件。
 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);
            }
        }