Teamcity-编写访问单独JSON文件的测试

本文关键字:文件 测试 JSON 单独 写访问 Teamcity- | 更新日期: 2023-09-27 17:57:33

我让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_SERVER 2016-07-18 15_28_19''Out''currency2.json"

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

感谢您的帮助。

Teamcity-编写访问单独JSON文件的测试

我也遇到了类似的问题。

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

  • 构建操作=内容
  • 复制到输出目录=始终复制

Teamcity会将文件复制到构建文件夹中,但它似乎没有保持您期望的结构。

所以我创建了一个文件查找循环。这将逐步减少预期的文件夹,直到它找到有问题的文本文件。

 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);
            }
        }

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

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

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

string[] programArgs;
static void Main(string[] args)
{
    programArgs = args
}
[TestInitialize]
public void Setup()
{
    using (StreamReader r = new StreamReader(programArgs[1]))
    {
    _json = r.ReadToEnd();
    }
    ...
}