2011-09-09 80 views
0

我有這樣的情況,我想一定是很常見的創建對象:生成代碼與當前值

class Parameter 
{ 
    public int someInt; 
    private decimal someDecimal; 
    public SubParameter subParameter; 
} 

class SubParameter 
{ 
    public string someString { get; set; } 
} 

我在給帶有參數作爲參數的方法調用一個斷點。我想寫一個單元測試,在這裏我使用相同的確切值調用此方法(Parameter對象「樹」的副本)。 在這種情況下編寫很多聲明和初始化類的所有字段和屬性非常乏味,它們本身可能是非原始的等。 如果我可以右鍵單擊參數變量然後讓代碼自動生成來創建這樣一個對象。

所以,如果我的斷點,我的參數對象的值

Parameter parameter = new Parameter 
    { 
    someInt = 42, 
    someDecimal = 42.42m, 
    subParameter = new SubParameter { someString = "42" } 
    }; 

好,那麼該代碼將產生。然後我可以將生成的代碼用於我的單元測試。

這樣的事情是否存在?


編輯:

我想我一直不清楚。我非常清楚如何親自編寫代碼。

我想要的是,當我打斷點並觀察一個複雜的變量(或任何變量)時,我想能夠說:爲我生成代碼,創建此變量的一個副本。我會使用生成的代碼進行單元測試。

這樣的工具是否存在?

回答

0

只需創建一個輔助方法來創建你的參數:

public void CreateParameter() 
{ 
    return new Parameter 
    { 
     someInt = 42, 
     someDecimal = 42.42m, 
     subParameter = new SubParameter { someString = "42" } 
    }; 
} 

樣品使用

[TestMethod] 
public void MyTest() 
{ 
    SomeClass.MethodBeingTested(CreateParameter()); 
} 

如果你想有一個特定的參數值,然後修改返回的參數或提供過載它允許你提供該值:

[TestMethod] 
public void MyTest() 
{ 
    Parameter parameter = CreateParameter(); 
    parameter.someInt = 23; 
    SomeClass.MethodBeingTested(parameter); 
} 

我通常hav e我的CreateParameter用隨機值填充參數,以減少單元測試碰巧「偶然」通過某些值的可能性,但會失敗。

0

可以使用TestInitialize用於初始化測試方法:

[TestClass] 
    public class UnitTest1 
    { 
     Parameter _parameter = null; 

     [TestInitialize] 
     public void Initialize() 
     { 
      _parameter = new Parameter 
      { 
       someInt = 42, 
       someDecimal = 42.42m, 
       subParameter = new SubParameter { someString = "42" } 
      }; 
     } 

     [TestCleanup] 
     public void Cleanup() 
     { 
      _parameter = null; 
     } 

     [TestMethod] 
     public void MyTest1() 
     { 
      // test _parameter 
     } 

     [TestMethod] 
     public void MyTest2() 
     { 
      // test _parameter 
     } 
    }