如何通过API向我的exe发送命令

时间:2014-11-06 14:06:11

标签: c# api console-application

我已经创建了一个控制台应用程序。这是代码:

[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;启动"当我创建它的实例?

道歉,如果我完全错误的话。

2 个答案:

答案 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?

在评论中讨论后,我提出了这个解决方案:

  • 为您的测试创建一个TestSuit [1]
  • 使用TestFixtureSetUp将控制台重定向到Console.SetOut以写入为此目的创建的窗口
  • 在测试中写入控制台

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