1

我正在尝试通过我们的一个内部应用程序运行一组测试用例。我需要能够自动化这些测试并通过命令行运行它们并记录各种事情。问题是现有代码没有将视图与控制器分开,并且在要求用户单击按钮的所有地方都抛出 MessageBoxes 和 Alerts(在我的情况下只是 OK/CONTINUE)。目前,已经决定引入状态标志,这将有助于确定应用程序正在运行的上下文,以便人们可以决定是执行 aConsole.WriteLine()还是 a MessageBox.Show()。但正如你可以想象的那样,这已经导致了很多变化和脏 if-else 块。

可悲的是,在这个阶段坐下来将逻辑与视图分开看起来并不可行。所以我想知道是否有办法检测应用程序正在执行的上下文。我想将每个 MessageBox() 调用替换为 Notify() 调用,它本身可以检测上下文 - 无论是在命令提示符下显示输出还是弹出表单。

EDIT_1:也欢迎任何其他建议这样做。

4

2 回答 2

0

在我的应用程序中,我解析命令行参数并设置一些内部标志。如果您将这种类型的解析添加到应用程序的入口点,例如,命令行参数的存在设置为“Y” - 可以在应用程序中设置适当的标志,用于确定将输出发送到何处。

就个人而言,我将所有“STDOUT”(控制台)输出捕获到一个日志文件中,然后如果不是在“预定”模式下运行 - 我会弹出一个msgbox().

于 2009-02-10T05:55:25.093 回答
0

在使用 Win32 API 的 C 语言中(在我脑海中,未经测试):

// requires Windows 2000 or later (for GetConsoleWindow)
int parent_owns_the_console()
{
    DWORD pid=0;
    GetWindowThreadProcessId(GetConsoleWindow(), &pid);
    return pid && pid != GetCurrentProcessId();
}
于 2009-02-10T06:31:20.017 回答