我已经创建了一个控制台应用程序。这是代码:
[Guid("fa3ff58b-05a9-4c1a-85d0-f7bf0188ffbf")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("ConsoleWindow.Program")]
public class Program
{
public Window myWindow = new Window();
public static void Main(string[] args)
{
}
}
[Guid("fa3ff58b-05a9-4c1a-85d0-f7bf0188ffbf")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("ConsoleWindow.Window")]
public class Window
{
public Window()
{
Console.WriteLine("Console Window has been launched");
Console.WriteLine("Waiting for input...");
}
[DispId(1)]
public void WriteToScreen(string text)
{
Console.WriteLine(text);
}
}
然后我有一个测试项目,我引用了EXE来公开api 我的测试看起来像这样:
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
Program myProg = new Program();
myProg.myWindow.WriteToScreen("example text to display");
}
}
一切都没问题,但是当我运行测试时它似乎没有启动exe,也没有写入窗口。有没有办法让exe到#34;启动"当我创建它的实例?
道歉,如果我完全错误的话。
答案 0 :(得分:1)
是的,你完全错了。如果您想直接启动exe,则必须使用Process.Start
。你不能做你想做的事。如果你想启动一个exe并为它的输出(控制台)写一些东西,你必须启动exe作为进程而不是连接到它。例如,通过TCP / IP,Namedpipes或其他东西。
测试是一个没有控制台的单个应用程序。
下面:
Program myProg = new Program();
myProg.myWindow.WriteToScreen("example text to display");
您只创建 Programm 类的实例,但它会在您的测试中运行。
答案 1 :(得分:0)
你想做什么?
如果你想启动应用程序exe并获得控制台输出,你必须这样做:
public class Program
{
public Window myWindow = new Window();
public static void Main(string[] args)
{
Program myProg = new Program();
myProg.myWindow.WriteToScreen("example text to display");
}
}
如果您希望单元测试检查输出是否有效,请尝试以下问题:
Unit Test Help. How do I test for a message output to console?
在评论中讨论后,我提出了这个解决方案:
Console.SetOut
以写入为此目的创建的窗口高度实验^ _ ^另外:如果您的自动化测试需要手动观察,您可能想要更改测试的工作方式