2015-11-02 51 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