在 Windows CE / Mobile 設備上進行 .NET CF 代碼單元測試,可使用輕量級 NUnitLite(NUnit 簡化版)。本文記錄從構建庫到編寫測試、運行輸出的完整流程。
NUnitLite-0.2.0.zip(現遷移至 Launchpad)。src\NUnitLiteCF 專案編譯,產出 NUnitLite.dll。NUnitLite.dll。Main 入口啟動 Runner:static void Main(string[] args)
{
using (var writer = new StreamWriter(@"\Test\TestResult.txt"))
{
new NUnitLite.Runner.TextUI(writer).Execute(args);
}
}
支援 TextUI(文件)、ConsoleUI(控制台)、DebugUI(調試輸出)、TcpUI(TCP 傳輸) 多種輸出。
[TestFixture]:標識測試類。[SetUp] / [TearDown]:每測試前後執行,初始化/釋放資源。[Test]:標識測試方法。[ExpectedException(typeof(AppException))]:驗證異常拋出。NUnitLite 不提供 AreEqual 等傳統方法,統一使用:
Assert.That(actual, Is.EqualTo(expected));
Assert.That(value, Is.GreaterThan(0));
Assert.That(reader.IsClosed, Is.False);
Assert.That(reader["f2"], Is.EqualTo("xyz"));
[TestFixture]
class SqlCeHelperTest
{
private SqlCeHelper sqlCe = new SqlCeHelper();
[SetUp] public void SetUp() => sqlCe.Open();
[TearDown] public void TearDown() => sqlCe.Close();
[Test]
public void ExecuteNonQueryTest()
{
int i = sqlCe.ExecuteNonQuery("delete from t");
Assert.That(i, Is.GreaterThan(-1));
i = sqlCe.ExecuteNonQuery("insert into t (f1,f2) values (1,'abc')");
Assert.That(i, Is.GreaterThan(-1));
}
[Test]
public void ExecuteReaderTest()
{
var reader = sqlCe.ExecuteReader("select * from t");
Assert.That(reader, Is.Not.Null);
Assert.That(reader.IsClosed, Is.False);
while (reader.Read())
Assert.That(reader["f2"], Is.EqualTo("abc"));
reader.Close();
}
[Test]
public void ExecuteDataSetTest()
{
var ds = sqlCe.ExecuteDataSet("select * from t");
foreach (DataRow dr in ds.Tables[0].Rows)
Assert.That(dr["f2"], Is.EqualTo("xyz"));
}
[Test]
[ExpectedException(typeof(ApplicationException))]
public void ThrowsException() => throw new ApplicationException("test");
}
NUnitLite version 0.2.0
Runtime: Windows CE 5.0 / .NET 2.0.7045.0
4 Tests : 0 Errors, 1 Failures, 0 Not Run
Failures:
1) ExecuteReaderTest : Expected True But was: False
NUnitLite 為 .NET CF 提供了標準化單元測試能力,語法與 NUnit 高度一致,支援豐富斷言與異常驗證,是設備端測試的首選方案。