我正在嘗試編寫一個異步Silverlight單元測試,如http://developer.yahoo.com/dotnet/silverlight/2.0/unittest.html中所述。也許我正在用lambda表達式掙扎,我不確定,但我不清楚如何編寫我的命名回調,以便異步測試毫無例外地完成。目前它在TestComplete()調用中引發System.UnauthorizedAccessException(無效的跨線程訪問),我猜測它是因爲它不知道它仍然在testNullInsert()測試中?幫助在Silverlight中編寫異步單元測試
問題 - 我該如何正確編寫測試,如果我需要lambda表達式,請解釋什麼是請求。
下面是我到目前爲止的代碼:
[TestClass]
public class IdentityEditDatabaseTest : WorkItemTest
{
[TestMethod, Asynchronous] public void testNullInsert()
{
wipeTestData(testNullInsertContinue1);
}
private void testNullInsertContinue1(String errorString)
{
IdentityProperties properties = new IdentityProperties(getContext());
properties.setUserName(DATABASE_TEST);
postUserEdit(properties, testNullInsertContinue2);
}
private void testNullInsertContinue2(String errorString)
{
Assert.assertTrue(errorString == null);
wipeTestData(testNullInsertContinue3);
}
private void testNullInsertContinue3(String errorString)
{
TestComplete();
}
}
謝謝!
編輯:正確的代碼在下面,這要感謝@ ajmccall的link!
[TestClass]
public class IdentityEditDatabaseTest : DatabaseTestCase
{
[TestMethod, Asynchronous] public void testNullInsert()// throws Throwable
{
EnqueueCallback(() => wipeTestData(errorString1 => {
IdentityProperties properties = new IdentityProperties(getContext());
properties.setUserName(DATABASE_TEST);
EnqueueCallback(() => postUserEdit(properties, errorString2 => {
Assert.assertTrue(errorString2 == null);
EnqueueCallback(() => wipeTestData(errorString3 => {
EnqueueTestComplete();
}));
}));
}));
}
無效的跨線程訪問異常是由於後臺線程試圖訪問UI線程的資源或反之。 –
當然,但它發生在間接調用系統調用的異步回調「TestComplete()」的行中。 – swinefeaster