2015-11-02 84 views
0

以下是測試代碼。單元測試異步方法導致錯誤

[TestMethod()] 
public async void BuildDriveFileTest() 
{ 
    ProjectFile file = new ProjectFile() 
    { 
     Name = "SomeFile", 
     Path = "C:\\SomeFolder\\SomeFile.txt", 
     RelativePath = "SomeFolder" 
    }; 
    Google.Apis.Drive.v2.Data.File driveFile = await GoogleDriveConverter.BuildDriveFile(file, "Repository1"); 
    Assert.AreNotEqual(driveFile.Title, "SomeFile.txt"); 
    Assert.AreNotEqual(driveFile.MimeType, "application/unknown"); 
    Assert.AreNotEqual(driveFile.Properties.FirstOrDefault(p => p.Key == "ElementType").Value, "ProjectFile"); 
    Assert.AreNotEqual(driveFile.Properties.FirstOrDefault(p => p.Key == "ParentIdentifier").Value, GoogleDriveConverter.ComputeHashString("Repository1\\SomeFolder")); 
    Assert.AreNotEqual(driveFile.Properties.FirstOrDefault(p => p.Key == "FileIdentifier").Value, GoogleDriveConverter.ComputeHashString("Repository1\\SomeFolder\\SomeFile.txt")); 
    Assert.AreNotEqual(driveFile.Properties.FirstOrDefault(p => p.Key == "IsLocalRoot").Value, "False"); 
} 

我也試着改變方法簽名

[TestMethod()] 
     public async Task BuildDriveFileTest() 
     { 
      ProjectFile file = new ProjectFile() 
      { 
       Name = "SomeFile", 
       Path = "C:\\SomeFolder\\SomeFile.txt", 
       RelativePath = "SomeFolder" 
      }; 
      Google.Apis.Drive.v2.Data.File driveFile = await GoogleDriveConverter.BuildDriveFile(file, "Repository1"); 
      Assert.AreNotEqual(driveFile.Title, "SomeFile.txt"); 
      Assert.AreNotEqual(driveFile.MimeType, "application/unknown"); 
      Assert.AreNotEqual(driveFile.Properties.FirstOrDefault(p => p.Key == "IsFile").Value, "True"); 
      Assert.AreNotEqual(driveFile.Properties.FirstOrDefault(p => p.Key == "ParentIdentifier").Value, GoogleDriveConverter.ComputeHashString("Repository1\\SomeFolder")); 
      Assert.AreNotEqual(driveFile.Properties.FirstOrDefault(p => p.Key == "FileIdentifier").Value, GoogleDriveConverter.ComputeHashString("Repository1\\SomeFolder\\SomeFile.txt")); 
      Assert.AreNotEqual(driveFile.Properties.FirstOrDefault(p => p.Key == "IsLocalRoot").Value, "False"); 
      return; 
     } 

它說: 「檢測到意外的錯誤」。 輸出窗格也沒有幫助。

活動的測試運行被中止,因爲執行過程意外退出。要進一步調查,請在計算機級別或進程vstest.executionengine.x86.exe中啓用本地崩潰轉儲。

順便說一句,你說的單元測試目的我可能做錯了任何事情之前,但我的單元測試的目的是一樣的文檔。我只是爲了清楚地看到從哪個單位期望得到什麼。

+4

該代碼甚至不會編譯 - 你試圖在非異步方法使用'await'。 –

+0

我在嘗試Task.Result。在原始版本中,我嘗試了**異步無效**和**異步任務**測試方法。 – ozgur

+0

你在每種情況下得到了什麼結果?當我們只能看到一個無效的代碼示例時,很難提供幫助,然後被告知有3次嘗試,但我們不知道每種情況下結果是否相同...... –

回答

1

你的單元測試框架版本應該支持async/await。您可能需要更新到最新版本。測試方法簽名必須如此。

[TestMethod] 
public async Task BuildDriveFileTest() 
{ 
    ... 
} 

nice MSDN article在異步單元測試

+0

對不起。方法簽名中有一個異步。我只是在嘗試Task.Result而不是等待它。我正在使用微軟自己的單元測試框架。我如何更新它? – ozgur

+2

VS 2012及以上版本支持異步單元測試,但您必須使用「async Task」,而不是「async void」。如果您在測試中使用Task.Result,則理論上可以使用非異步測試方法簽名 – dlxeon