如何通过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的实例时,有没有办法让它"启动"?

如果我做错了,我道歉。

如何通过API将命令发送到我的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的控制台,以写入为此目的创建的窗口
  • 在测试中写入控制台

高度实验性^_^此外:如果您的自动化测试需要手动观察,您可能需要更改测试的工作方式