如果在单元测试和控制台应用程序中运行,功能的行为会有所不同

时间:2018-11-08 19:24:35

标签: c# unit-testing

我们正在使用旧的第三方库。该库是很久以前从C编译的DLL。当我从单元测试运行特定功能时,我得到了正确的输出。当我在控制台应用程序或任何形式的运行时中运行完全相同的代码(逐字节比较)时,我得到的输出无效。我不知道是怎么回事。我无法提供第三方库,但是我可以提供为实现此目的而运行的代码,并且该代码非常少。

在加载DLL并运行函数的类库项目中:

public class HFSAPI
{
    [DllImport("C:\\MCRIF32\\HFSWSAPI.dll")]
    static extern void GetMCRDataA(String instructions, StringBuilder result);

    public string GetData(string input)
    {
        StringBuilder output = new StringBuilder(new String(' ', 10000000));
        GetMCRDataA(input, output);
        return output.ToString();
    }
}

单元测试:

[TestClass]
public class UnitTest1
{

    [TestMethod]
    public void GetBPart1AndCostCenters()
    {
        HFSAPI test = new HFSAPI();
        String input = File.ReadAllText("C:\\absolute\\path\\to\\XMLFile1.xml");
        String result = test.GetData(input);
        File.WriteAllText("Output.txt", result);
        Assert.AreEqual(true, true);
    }
}

我的控制台应用程序试图运行,只是加载了单元测试并按以下方式运行它:

    static void Main(string[] args)
    {
        var unitTest = new UnitTest1();
        unitTest.GetBPart1AndCostCenters();
        var result = File.ReadAllText("Output.txt");
        Console.WriteLine(result);
    }

我不知道这怎么不起作用。我开始认为这是某种形式的编译器级问题。在单元测试中,如果我运行或调试它,无论哪种方式,我都会得到正确的输出。在任何形式的控制台应用程序中,如果我运行任何代码,即使直接调用单元测试本身,也将得到无效的输入。如上面的代码所述,所有路径都是绝对路径,所以这并不意味着它们使用了不同的输入或其他任何输入。

为了完整起见,下面是使用说明加载的XML文件:

<?xml version="1.0" encoding="utf-16"?>
<instructions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <files>
        <file type="2552-10" instruction="Batch">C:\absolute\path\to\041331_12312016.mcrx</file>
    </files>
    <instruction name="Batch">
        <read id="worksheetsex">
        </read>
    </instruction>
</instructions>

对于为什么会发生这种行为以及如何解决它,任何人都有线索。我不能一直运行单元测试来不断获得下一步的正确输出。那是不可行的。是否有正在设置的标志或其他标志?

为澄清起见进行编辑:通过单元测试运行时,输出的是XML字符串,长度超过368,000个字符。这是正确的预期输出。通过控制台应用程序运行时,它的长度为637个字符。这样可以让您了解它的数量级。

0 个答案:

没有答案