13
我想編寫C++ Google測試,它可以使用value-parameterized tests以及不同數據類型的多個參數,理想地匹配以C++/CLI編寫的以下mbUnit測試的複雜性。可以使用多個不同類型的參數匹配mbUnit的靈活性,Googletest value-parameterized參數化嗎?
請注意這是多麼緊湊,[Test]
屬性指示這是測試方法和[Row(...)]
屬性定義實例的值。
[Test]
[Row("Empty.mdb", "select count(*) from collar", 0)]
[Row("SomeCollars.mdb", "select count(*) from collar", 17)]
[Row("SomeCollars.mdb", "select count(*) from collar where max_depth=100", 4)]
void CountViaDirectSQLCommand(String^ dbname, String^ command, int numRecs)
{
String^ dbFilePath = testDBFullPath(dbname);
{
StAnsi fpath(dbFilePath);
StGdbConnection db(fpath);
db->Connect(fpath);
int result = db->ExecuteSQLReturningScalar(StAnsi(command));
Assert::AreEqual(numRecs, result);
}
}
甚至更好,從C#這更奇特的測試(推什麼可以在.net中被定義的邊界屬性,超出了在C++/CLI是可能的):
[Test]
[Row("SomeCollars.mdb", "update collar set x=0.003 where hole_id='WD004'", "WD004",
new string[] { "x", "y" },
new double[] { 0.003, 7362.082 })] // y value unchanged
[Row("SomeCollars.mdb", "update collar set x=1724.8, y=6000 where hole_id='WD004'", "WD004",
new string[] { "x", "y" },
new double[] { 1724.8, 6000.0 })]
public void UpdateSingleRowByKey(string dbname, string command, string idValue, string[] fields, double[] values)
{
...
}
的help說:值參數化測試可以讓您只編寫一次測試,然後輕鬆實例化並使用任意數量的參數值運行測試。但我相當確定是指測試用例的數量。
即使沒有改變數據類型,在我看來參數化測試只能採取一個參數?
謝謝,搶。對於單個參數使用某種結構是我擔心的解決方案。正如你從編輯中看到的那樣,顯示完整的測試,它確實使得gtest方法比mbUnit/NUnit風格大得多。我只是意識到,對於一個給定的燈具,所有測試都必須進行參數化,而對於.Net測試來說,這是每次測試的選擇。但是,對於不願意使用C++/CLI測試其本機代碼的人來說,gtest參數化仍然比其他本地套件所提供的更好! – 2011-06-06 23:18:07
是的,但如果您需要其他類型的參數,則創建另一個測試夾具很簡單。如果他們都需要類似的設置和拆卸代碼,則可以使用繼承。如果你沒有安裝和拆卸,那麼這個夾具可以*正是我在這裏爲'AndyTest'顯示的代碼。測試的主體不必太大,因爲我的編輯通過引入'p'參數變量來顯示。因爲C++不支持註釋,所以你可能永遠不會得到像.NET測試框架那樣的優雅,所以你總是會有一些單獨的聲明。 – 2011-06-07 01:40:36
@RobKennedy這'Row'屬性是否有文檔..?你能指點我一個鏈接什麼的? – 2013-08-26 13:21:06