我想寫一個[DataTestMethod]
使用很多[DataRow]
s的,都包含兩個位元組陣列。但是,我的問題是測驗方法只使用最后一行的資料。
我撰寫了一個測驗,其中的資料行只包含作業正常的整數。另一個包含一個位元組陣列和一些布林值。但是我無法使用兩個位元組陣列來獲得多個資料行。
作業測驗:
[DataTestMethod]
[DataRow(1, 1, 2)]
[DataRow(2, 2, 4)]
[DataRow(3, 3, 6)]
public void AddTests(int x, int y, int expected)
{
Assert.AreEqual(expected, x y);
}
[DataRow(new byte[] { 0x00 }, false, false, false)]
[DataRow(new byte[] { 0x00 }, true, true, false)]
[DataRow(new byte[] { 0x00 }, false, true, false)]
[DataRow(new byte[] { 0x00 }, true, false, false)]
[DataTestMethod()]
public void ByteArrayIntegerTest(byte[] key,bool ctorsign, bool tasign,bool expectfail)
{
var bi = new ByteArrayInteger(key, ctorsign);
var result = bi.ToByteArray(tasign);
if (expectfail)
{
CollectionAssert.AreNotEqual(key, result);
}
else
{
CollectionAssert.AreEqual(key, result);
}
}
不作業測驗:
[DataTestMethod]
[DataRow(new byte[] { 0xCA, 0xFE }, new byte[] { 0xCA, 0xFE })]
[DataRow(new byte[] { 0x00, 0xCA, 0xFE }, new byte[] { 0xCA, 0xFE })]
[DataRow(new byte[] { 0x00, 0x00, 0xCA, 0xFE }, new byte[] { 0xCA, 0xFE })]
public void MinimizeSerialnumberTest(byte[] serialnumber, byte[] expected)
{
CollectionAssert.AreEqual(expected, Util.MinimizeSerialnumber(serialnumber));
}
對于非作業測驗,它只使用最后提供的DataRow
. 沒有錯誤,測驗運行良好。
不Microsoft.VisualStudio.TestTools.UnitTesting
支持多位元組陣列?或者可能是什么問題?
編輯:經過更多研究。問題可能是在它的建構式中作為引數嗎DataRowAttribute
?資源Object, Object[]
如果是這樣,我將如何使用它?
uj5u.com熱心網友回復:
編輯:經過更多研究。問題可能是在它的建構式中作為引數嗎
DataRowAttribute
?Object, Object[]
是的,似乎是這樣。第二個引數是params
,因此編譯器執行以下翻譯:
first argument -- --- array of remaining arguments
| |
v v
DataRow(1, 2, 3) -> DataRow(1, new object[] { 2, 3 });
DataRow(1, 2) -> DataRow(1, new object[] { 2 });
但是,編譯器不會轉換DataRow(1, someObjectArray)
為DataRow(1, new object[] { someObjectArray })
,而是將物件陣列保持原樣。如果您想要實際傳遞一個包含測驗方法的所有(剩余)引數的物件陣列,這是必要的。
由于byte[]
可以隱式轉換為object[]
(過去我們沒有泛型時遺留下來的不幸遺留問題),看來
- 你
byte[]
被隱式轉換為一個object[]
然后 - this
object[]
用作第二個引數,
為您的測驗生成以下資料行:({ 0xCA, 0xFE }, 0xCA, 0xFE
而不是縮進的{ 0xCA, 0xFE }, { 0xCA, 0xFE }
)。
如果是這樣,我將如何使用它?
將第二個引數顯式包裝在 object[] 中:
[DataRow(new byte[] { 0xCA, 0xFE }, new object[] { new byte[] { 0xCA, 0xFE } })]
uj5u.com熱心網友回復:
我認為問題出在DataRowAttribute
. 我將資料行更改為以下內容,現在一切都按預期作業。
[DataRow(1, new byte[] { 0xCA, 0xFE }, new byte[] { 0xCA, 0xFE })]
[DataRow(2, new byte[] { 0x00, 0xCA, 0xFE }, new byte[] { 0xCA, 0xFE })]
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/504759.html