c# - Visual Studio 单元测试和命令行参数以避免源代码控制中的密码

标签 c# unit-testing visual-studio-2013

我正在尝试测试我登录 API 的能力。自然地,这意味着我需要我的测试类来访问我的用户名和密码。但是,我想把这个项目放在公共(public)源代码管理中,所以我不能在代码中共享我的用户名和密码(人们可以想象)。我会使用命令行参数,因为它们存储在 .user 文件中(可以在不破坏其他用户的项目的情况下将其置于源代码控制之外)。然而,这些似乎并没有真正传递给测试类(至少,当我使用 Environment.GetCommandLineArgs() 时,我没有看到它们)。那么如何在不破坏其他用户的项目的情况下在本地存储我的密码呢?有办法吗?

最佳答案

常见的做法如下:

  1. 向您的项目添加一个模板文件,其内容与您要在其中存储这些内容的文件相同,只是没有实际值。在它们的位置放置空值或虚拟值。
  2. 将此模板文件添加到源代码管理
  3. 从源代码管理中删除必须包含实际值的文件,并要求它忽略此文件的 future 副本。但是,不要将其从您的项目中删除。
  4. 添加包含如下命令的预构建构建事件:

    IF NOT EXIST "$(ProjectDir)\App.config" COPY "$(ProjectDir)\App-template.config" "$(ProjectDir)\App.config"
    

现在有这样的效果:

  1. 配置文件的模板现在在源代码管理中,没有敏感信息
  2. 当您克隆或 checkout 项目的新副本时,磁盘上将丢失用于存储敏感信息的实际文件,并且 Visual Studio 将对其进行标记,忽略此
  3. 构建,这将执行上面的命令,有效地检查实际文件是否存在,然后从模板文件复制一个新副本。
  4. 编辑新创建的实际文件,添加敏感信息。
  5. 再做一次构建
  6. 运行单元测试或程序

此方法必须起作用,您可以要求您的源代码控制工具忽略磁盘上或什至项目本身中存在的文件,这样它就不会在您稍后自动将其添加到提交中修改了它。

关于c# - Visual Studio 单元测试和命令行参数以避免源代码控制中的密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33303963/

相关文章:

javascript - C# 如何将复杂的 JSON 对象的子对象转换为模型

C#在不按住按钮的情况下单击按钮运行耗时的方法

xcode - 在 Visual Studio 2013 上使用 std::function<void>

c# - 将方法传递给 backgroundworker dowork

c# - 如何为 ListBoxItems 设置不同的 Horizo​​ntalAlignment

c# - UnitTest 一种依赖于时间的方法

c# - Unity3D调用外部dll

visual-studio-2013 - 没有安装的预配配置文件与使用 Visual Studio 在 Xamarin 中安装的 iOS 代码签名 key 匹配

java - 模拟来自父类的方法以返回模拟数据

c# - 所有的类(class)都应该是可测试的吗?