如何通过API将命令发送到我的exe
本文关键字:我的 exe 命令 何通过 API | 更新日期: 2023-09-27 18:29:20
我已经创建了一个控制台应用程序。这是代码:
[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的实例时,有没有办法让它"启动"?
如果我做错了,我道歉。
是的,你完全错了。如果要直接启动exe,则必须使用Process.Start
。你不能做你想做的事。如果你想启动一个exe并将一些东西写入它的输出(控制台),你必须启动exe作为进程,然后连接到它。例如,通过TCP/IP、Namedpipes或其他方式。
测试是一个没有控制台的单一应用程序,正如您所期望的那样。
此处:
Program myProg = new Program();
myProg.myWindow.WriteToScreen("example text to display");
您只创建Programm类的一个实例,但它在测试中运行。
你到底想做什么?
如果你想启动应用程序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");
}
}
如果你想让单元测试检查输出是否有效,试试这个问题:
单元测试帮助。如何测试向控制台输出的消息?
经过评论中的讨论,我提出了这个解决方案:
- 为您的测试创建测试套装[1]
- 使用TestFixtureSetUp重定向带有
Console.SetOut
的控制台,以写入为此目的创建的窗口 - 在测试中写入控制台
高度实验性^_^此外:如果您的自动化测试需要手动观察,您可能需要更改测试的工作方式