所以,有了 Enterprise,你就走运了。
假设一个示例项目是这样的:
- 安装了一个nuget包
Google.Apis.Drive.v3
- 添加了一个具有以下列表的类:
这是实际程序
public class Class1
{
public async Task<Google.Apis.Drive.v3.Data.FileList> ReadFileList(string parentId, string pageToken, int pageSize)
{
// get the service somehow.
var ds = new DriveService();
var listRequest = ds.Files.List();
listRequest.PageSize = pageSize;
listRequest.Q = "mimeType='application/vnd.google-apps.folder' and ('" + parentId + "' in parents)";
listRequest.Fields = "nextPageToken, files(id, name)";
listRequest.PageToken = pageToken;
// List files.
return await listRequest.ExecuteAsync();
}
}
我们可以利用 Microsoft Fakes 框架的强大功能对这里的所有内容进行单元测试,而无需连接到互联网、谷歌驱动器、帐户等。
- 添加一个 Microsoft 测试项目(注意:这里只使用一个 dll 是行不通的)
- 在测试项目中,安装相同的 nuget 包。
为您的类所在的库生成假程序集(在本例中,Google.Apis.Drive.v3 和 Google.Apis,您正在使用两者中的类型):
编写单元测试:
像这样
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
using (Microsoft.QualityTools.Testing.Fakes.ShimsContext.Create())
{
int? usedPageSize = 0;
var usedQ = string.Empty;
var usedFields = string.Empty;
var usedPageToken = string.Empty;
Google.Apis.Drive.v3.Fakes.ShimFilesResource.ShimListRequest.AllInstances.PageSizeSetNullableOfInt32 =
(request, i) => usedPageSize = i;
Google.Apis.Drive.v3.Fakes.ShimFilesResource.ShimListRequest.AllInstances.QSetString = (request, s) => usedQ = s;
Google.Apis.Drive.v3.Fakes.ShimDriveBaseServiceRequest<Google.Apis.Drive.v3.Data.FileList>.AllInstances
.FieldsSetString = (request, s) => usedFields = s;
Google.Apis.Drive.v3.Fakes.ShimFilesResource.ShimListRequest.AllInstances.PageTokenSetString = (request, s) => usedPageToken = s;
Google.Apis.Requests.Fakes.ShimClientServiceRequest<Google.Apis.Drive.v3.Data.FileList>.AllInstances
.ExecuteAsync =
request =>
Task.FromResult(
new FileList
{
ETag = "hello",
Files = new List<File> { new File { Name = "imafile" } },
IncompleteSearch = false,
Kind = "Somekind",
NextPageToken = null
});
Google.Apis.Drive.v3.Fakes.ShimFilesResource.AllInstances.List = resource => (FilesResource.ListRequest)FormatterServices.GetUninitializedObject(typeof(FilesResource.ListRequest));
Google.Apis.Drive.v3.Fakes.ShimDriveService.Constructor = service => { }; // do not init the class
Google.Apis.Drive.v3.Fakes.ShimDriveService.AllInstances.FilesGet = service => (FilesResource)FormatterServices.GetUninitializedObject(typeof(FilesResource));
var target = new Class1();
var result = target.ReadFileList("parent", "token", 42).Result;
Assert.AreEqual(42, usedPageSize);
Assert.AreEqual("mimeType='application/vnd.google-apps.folder' and ('parent' in parents)", usedQ);
Assert.AreEqual("nextPageToken, files(id, name)", usedFields);
Assert.AreEqual("token", usedPageToken);
Assert.AreEqual(1, result.Files.Count);
Assert.AreEqual("imafile", result.Files[0].Name);
Assert.AreEqual("hello", result.ETag);
Assert.IsFalse(result.IncompleteSearch.Value);
Assert.AreEqual("Somekind", result.Kind);
Assert.IsNull(result.NextPageToken);
}
}
}