单元测试控制台 C# 应用程序的最佳方法

2023-11-22

我有一个简单的控制台应用程序。它是用一个普通的 main 来触发的,整个程序都在 main 中。它使用命令行解析器库。然后,我在解决方案中有第二个项目,其中包含应用程序的单元测试。但我似乎没有找到从测试中启动主程序进程的好方法。我当前实际启动该过程的代码看起来像这样。

...

process = new Process();
process.StartInfo.FileName = "FooBar";
process.StartInfo.Arguments = arguments;

// use it to start from testing environment
process.StartInfo.UseShellExecute = false;

// redirect outputs to have it in testing console
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;

...

我尝试过设置

process.StartInfo.WorkingDirectory

to

AppDomain.CurrentDomain.BaseDirectory

and

Environment.CurrentDirectory;

但是我是否必须指定控制台应用程序可执行文件的完整相对路径,或者是否有一种改进的方式来启动“测试”应用程序的进程? 首先,我在“主”程序中作为一个类进行了测试,然后它工作得很好。当我将测试转移到他们自己的项目时,问题就开始了。这就是为什么我怀疑路径是问题或类似性质的问题。

我也尝试过 Running Program.Main 但感觉很不对:)


我建议将您的应用程序重组为:

  • Program- 解析参数的入口点,创建一个Settings实例
  • Settings- 应用程序的设置(根据口味重命名)
  • BusinessClass-(绝对重命名!)实际工作,它接受Settings实例

现在您可以单独测试:

  • 测试解析为Settings,即您是否正确使用解析器库
  • 您的业​​务逻辑,其中单元测试创​​建适当的实例Settings

如果可能的话,您应该将业务逻辑分离到单独的类中以解决不同的问题,并单独测试每个类。我们确实了解不够,无法在这里提出具体建议。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单元测试控制台 C# 应用程序的最佳方法 的相关文章

  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • 测试弱引用

    在 Java 中测试弱引用的正确方法是什么 我最初的想法是执行以下操作 public class WeakReferenceTest public class Target private String value public Targe
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include

随机推荐

  • void** 是 ANSI-C 中可接受的类型吗?

    我见过一个函数 其原型是 int myfunc void ppt 该函数在 C 文件中调用为 a myfunc mystruct var1 其中 mystruct 是我们拥有的结构之一的 typedef 这在MSVC6 0中没有任何编译错误
  • 如何将选定的列从具有不同列的 df 附加到 pandas 数据框

    我希望能够将 df1 df2 df3 附加到一个 df All 中 但由于每个数据帧都有不同的列 我怎样才能在 for 循环中做到这一点 我还有其他必须在 for 循环中做的事情 import pandas as pd import num
  • 对部分排序列表进行排序的最佳方法是什么?

    可能最好用一个小例子来说明 鉴于关系 A lt B lt C A lt P lt Q 正确的输出是 ABCPQ or APQBC or APBCQ etc 换句话说 只要给定的关系成立 任何顺序都是有效的 我对最容易实现的解决方案最感兴趣
  • 获取 Angular 2 .ts 文件而不是 .d.ts 文件

    当我使用 angular2 代码时 我经常需要看到执行一个类 比方说Router class 如果我点击Router输入我的 IDE WebStorm e G 在另一个类的构造函数中 export class myClass constru
  • 如何在没有 Transfer Encoding: chunked 的情况下发送 HTTP 响应?

    我有一个响应 Twilio API 的 Java Servlet Twilio 似乎不支持我的回复所使用的分块传输 我怎样才能避免使用Transfer Encoding chunked 这是我的代码 response is HttpServ
  • Web 服务无法序列化接口

    我有一个像这样的界面 public interface IDocument ISerializable Boolean HasBeenUploaded get set void ISerializable GetObjectData Ser
  • RXTX 在 Windows 7 64 位下无法列出或找到端口

    早上好 我在 Windows 7 64 位上使用 或安装 rxtx 时遇到问题 我之前在 x86 win XP 系统上使用过它 没有出现任何问题 由于由于某种原因重新安装到这个新系统 rxtx 无法找到任何端口 我尝试过 rxtx 安装 C
  • C中整数的大小[重复]

    这个问题在这里已经有答案了 可能的重复 int 的大小是否取决于编译器和 或处理器 整数的大小是否取决于编译器 操作系统或处理器 如果我在 32 位操作系统或 64 位操作系统上使用 gcc 并在 32 位计算机或 64 位计算机上运行 在
  • 如何让 Emacs 启动更快?

    I use Emacsv 22 控制台版本 可以远程使用PuTTY或本地与Konsole 作为我在 Linux 上的主要文本编辑器 每次启动时都需要一段时间来加载 可能几乎一秒钟 尽管我从未计时 我经常打开和关闭 Emacs 因为我更喜欢使
  • 在 R 中的同一数据框中绑定具有相似列名的列

    我有一个看起来有点像这样的数据框 df lt data frame 0 2 1 3 2 4 5 7 6 8 2 4 0 2 1 3 2 4 colnames df lt rep c a b c 3 gt df a b c a b c a b
  • 从 Zip 文件中删除文件夹

    我正在尝试从 Zip 文件中删除文件夹 所以我的文件结构是这样的 首先内部 我尝试使用这里的代码从 Zip 中删除文件作者 Siddharth Rout 但它只移动文件 显然文件夹变空了 但并未从 Zip 中删除 Code Sub del
  • 以编程方式添加的捆绑产品未显示在前端

    我正在尝试从 PHP 脚本将捆绑产品插入 Magento 数据库 有问题的版本是社区 1 5 1 0 我尝试了问题中描述的方法 使用简单商品的 SKU ID 以编程方式在 Magento 中添加捆绑产品 插入的产品在管理部分中显示得很好 我
  • 是否应该在 Web 应用程序中禁用实体框架延迟加载?

    我听说您应该在 Web 应用程序中禁用 EF 的延迟加载功能 ASP NET Here and here 对于初学者 现在我在这里真的很困惑 因为我一直认为应该始终启用延迟加载 因为它可以防止从数据库获取不必要的数据 所以 现在我的问题是
  • 在 iOS Core Data 中存储高精度纬度/经度数字

    我正在尝试将纬度 经度存储在核心数据中 这些最终精度为 6 到 20 位 无论出于何种原因 我将它们作为核心数据中的浮点数 将它们四舍五入而不给我返回确切的值 我尝试了 十进制 类型 但也没有运气 NSStrings 是我唯一的选择吗 ED
  • grunt-contrib-jasmine 和 PhantomJS 安全性

    我收到错误 XMLHttpRequest 无法加载https my api domain com Access Control Allow Origin 不允许 Origin file 当我尝试运行一些通过 grunt contrib ja
  • 使用关联数组的 D3 日历视图

    我想创建一个日历视图 如下例所示 http bl ocks org 4063318 其实我正在尝试修改它 我有一个像这样的关联数组 AdminCourt 2012 10 02 2 2012 10 09 2 2012 10 16 1 Cons
  • Java 无法使用正则表达式 \s,显示:无效的转义序列

    我想用 替换字符串中的所有空白字符 用 ss 替换所有 它对于 效果很好 但不知何故 eclipse 不允许我使用 s 作为空白 我尝试了 t 但它也不起作用 我收到以下错误 无效的转义序列 有效的转义序列 是 b t n f r 这是我的
  • 将元素值反序列化为字符串,尽管它包含混合内容

    假设这样的 XML
  • 将数据框日期列的 dd-mm-yyyy 日期格式更改为 yyyy-mm-dd [重复]

    这个问题在这里已经有答案了 我有这个熊猫数据框df Name Date Score Score2 Joe 26 12 2007 53 45 53 4500 Joe 27 12 2007 52 38 52 7399 Joe 28 12 200
  • 单元测试控制台 C# 应用程序的最佳方法

    我有一个简单的控制台应用程序 它是用一个普通的 main 来触发的 整个程序都在 main 中 它使用命令行解析器库 然后 我在解决方案中有第二个项目 其中包含应用程序的单元测试 但我似乎没有找到从测试中启动主程序进程的好方法 我当前实际启