我们正在使用旧的第三方库。该库是很久以前从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个字符。这样可以让您了解它的数量级。