在运行时期间获取对象值,以创建编写单元测试所需的Mock对象

时间:2015-06-04 11:05:46

标签: c# visual-studio unit-testing

考虑下面需要测试的类,

class ToBeTested
{
  Employee _e;
  public ToBeTested(Employee e)
  {
  _e = e;
  }

  void Process()
  {
  // Do something with _e
  }
}

    [TestClass]
    class ToBeTestedTest
    {
    [TestMethod]
    public void TestProcessMethod()
    {
      Employee e = // Initialise it with some test value..
      ToBeTested tbt = new ToBeTested(e);
      tbt.Process();

      //Assert to Verify the test results...  
    }

问题是Employee实际上可以是一个非常复杂的类型,其中包含属性,它们本身可以是更多类的对象。使用模拟值初始化Employee并生成可测试对象变得很困难。

调试时我可以设置断点并查看Employee中包含的ToBeTested对象。有没有办法可以在运行时获取此对象中的所有值,并在我的测试方法中使用它?

2 个答案:

答案 0 :(得分:7)

您可以使用 Object Exporter 。它是Visual Studio的扩展,它将从调试窗口中的任何对象生成C#初始化代码。您可以在单元测试初始化​​中使用此生成的代码。

答案 1 :(得分:1)

提到的Visual Studio扩展(OmarElabd / ObjectExporter)是个好主意,但我需要在运行单元测试期间在运行时从内存中对象生成C#代码。这是从原始问题https://www.nuget.org/packages/ObjectDumper.NET/

演变而来的

ObjectDumper.Dump(obj,DumpStyle.CSharp);从变量返回C#初始化代码。如果发现问题,请告诉我,您可能想在github上报告它们。