如何从UnitTest与我的WinForms应用程序进行交互

时间:2015-03-27 12:46:02

标签: c# winforms winforms-interop

我已经构建了一个WinForms应用程序,它只包含一个RichTextBox,并且已经将它构建到一个EXE中。

此EXE的目的是充当记录器,以便在运行测试时将日志输出到此EXE上。

重要提示是,通过在项目中添加EXE作为参考,可以在单独的单元测试(由Microsoft测试管理器运行)解决方案中引用此EXE。这似乎暴露了我需要的对象。

我通过ChannelFactory接口使用HTTP取得了一些成功,但我更喜欢直接与EXE对话。

我所拥有的这些单元测试实质上是从OpenVMS发送和接收数据,其中一些测试可能需要一些时间才能完成。

所以我构建了一个新的Console项目来测试我在logger.exe中公开的公共方法,到目前为止我的代码是:

TerminalLogger.Logger term = new TerminalLogger.Logger();
term.TerminalLog("Test");

当我运行此表单时,表单会打开,但没有任何内容加载。所以我假设这是因为表单在同一个线程上运行?我是否需要在自己的线程上运行此表单?

我注意到如果我添加" term"要在Visual Studio中观看并检查richtextbox,我可以看到它实际上写了值#34;测试"对象,但当然我看不到这个,因为表格还没有完全渲染。

我仍然需要能够调用term.LogMessage("示例消息")等方法并将其显示在表单上。

如果您需要额外信息,请添加评论,我会尽力详细说明我的问题。

1 个答案:

答案 0 :(得分:0)

好吧,我问过我的组织的一位网络开发人员,他们可能会提供帮助,而且显然正在重新调整我的问题!

我简单地补充道:

        LogConsole.TextChanged += (sender, e) =>
        {
            if (this.Visible)
            {
                this.Refresh();
            }
        };

以下是我从单元测试中调用代码的方法:

TerminalLogger.Logger term = new TerminalLogger.Logger();

        term.Show();
        term.TerminalLog("Test1");
        term.TerminalLog("Test2");

我可以在没有锁定的情况下发送消息。