[英]Whole set of unit test cases pass but if I run individual it fails
下面是我的單元測試用例集。 不知道是不是我寫錯了。 但是如果我一次運行所有單元測試用例(進入測試資源管理器--> 右鍵單擊 CosmosDataTests--> 運行),我的所有單元測試用例都通過了。 但是如果我嘗試在測試資源管理器中運行單個測試用例,它會失敗......說“所有者資源不可用”。 我在這里做錯了什么??
這是我的代碼:
public class CosmosDataFixture : IDisposable
{
public static readonly string CosmosEndpoint = "https://localhost:8081";
public static readonly string EmulatorKey = "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==";
public static readonly string DatabaseId = "dummydatabase";
public static readonly string RecordingCollection = "testcontainer";
public static string Root = Directory.GetParent( Directory.GetCurrentDirectory() ).Parent.Parent.FullName;
public static DocumentClient client { get; set; }
public async Task ReadAllData( DocumentClient client )
{
string path = Path.Combine( Root, @"TestData\Dummydata.json" );
var lines = File.ReadAllLines( path );
var jData = new List<JObject>();
foreach( var line in lines )
{
var data = JsonConvert.DeserializeObject<JObject>( line );
jData.Add( data );
}
Uri collectionUri = UriFactory.CreateDocumentCollectionUri( DatabaseId, RecordingCollection );
foreach( var obj in jData )
{
await client.UpsertDocumentAsync( collectionUri, obj );
}
}
public async Task ReadConfigAsync()
{
client = new DocumentClient( new Uri( CosmosEndpoint ), EmulatorKey,
new ConnectionPolicy
{
ConnectionMode = ConnectionMode.Direct,
ConnectionProtocol = Protocol.Tcp
} );
await client.CreateDatabaseIfNotExistsAsync( new Database { Id = DatabaseId } );
await client.CreateDocumentCollectionIfNotExistsAsync( UriFactory.CreateDatabaseUri( DatabaseId ),
new DocumentCollection { Id = RecordingCollection } );
await ReadAllData( client );
}
private async Task DeleteDatabaseFromPowerShell()
{
await client.DeleteDatabaseAsync( UriFactory.CreateDatabaseUri( DatabaseId ) );
}
public CosmosDataFixture()
{
ReadConfigAsync();
}
public void Dispose()
{
DeleteDatabaseFromPowerShell();
}
}
public class CosmosDataTests : IClassFixture<CosmosDataFixture>
{
[Fact]
public async Task CheckDatabaseandCollectionCreation()
{
List<string> collectionName = new List<string>();
var uri = UriFactory.CreateDatabaseUri( CosmosDataFixture.DatabaseId);
var collections = await CosmosDataFixture.client.ReadDocumentCollectionFeedAsync( uri );
foreach( var collection in collections )
{
collectionName.Add( collection.Id);
}
Assert.Contains( "testcontainer", collectionName );
}
[Fact]
public void AddDataInCosmosDbEmulator()
{ ...2nd test case..and so on}
詳細錯誤信息:
消息:System.Management.Automation.CmdletInvocationException:消息:{"Errors":["Resource Not Found。了解更多:https://aka.ms/cosmosdb-tsg-not-found"]} ActivityId:1e276085-da33- 42a0-8e45-9c5d0e951512,請求 URI:/apps/DocDbApp/services/DocDbMaster0/partitions/780e44f4-38c8-11e6-8106-8cd42c33be/replicas/1p/,Request:Time127373:Request:Time152730 RequestEndTime: 2021-07-05T12:17:54.9135143Z, 嘗試的區域數:1, SDK: Microsoft.Azure.Documents.Common/2.11.0, Windows/10.0.19042 documentdb-netcore-sdk/2.14.0 -- -- Microsoft.Azure.Documents.DocumentClientException : Message: {"Errors":["Resource Not Found. Learn more: https://aka.ms/cosmosdb-tsg-not-found"]} ActivityId: 1e276085-da33- 42a0-8e45-9c5d0e951512,請求 URI:/apps/DocDbApp/services/DocDbMaster0/partitions/780e44f4-38c8-11e6-8106-8cd42c33be/replicas/1p/,Request:Time127373:Request:Time152730 RequestEndTime:2021-07-05T12:17:54.9135143Z,區域數量 mpted:1, SDK: Microsoft.Azure.Documents.Common/2.11.0, Windows/10.0.19042 documentdb-netcore-sdk/2.14.0 Stack Trace: PipelineBase.Invoke(IEnumerable input) Pipeline.Invoke() CosmosDataTests.VerifyGetChangeRecordFeedsDocuments () 第 177 行 ----- 內部堆棧跟蹤 ----- GatewayStoreClient.ParseResponseAsync(HttpResponseMessage responseMessage, JsonSerializerSettings serializerSettings, DocumentServiceRequest request) GatewayStoreClient.InvokeAsync(DocumentServiceRequest request, ResourceType resourceType, Uri physicalAddress, CancellationToken cancelationToken) GatewayStoreModel.ProcessMessageAsync( DocumentServiceRequest 請求,CancellationToken 取消令牌) DocumentClient.ProcessRequestAsync(DocumentServiceRequest 請求,IDocumentClientRetryPolicy retryPolicyInstance,CancellationToken 取消令牌) DocumentClient.ProcessRequestAsync(字符串動詞,DocumentServiceRequest 請求,IDocumentClientRetryPolicy retryPolicyInstance,CancellationToken 取消令牌,Stri 納克testAuthorization)ChangeFeedQuery
1.GetFeedResponseAsync(String resourceLink, ResourceType resourceType, IDocumentClientRetryPolicy retryPolicyInstance, CancellationToken cancellationToken) ChangeFeedQuery
1.ReadDocumentChangeFeedPrivateAsync [TResult](字符串鏈接,IDocumentClientRetryPolicy retryPolicyInstance,的CancellationToken的CancellationToken)BackoffRetryUtility1.ExecuteRetryAsync(Func
1 callbackMethod,Func鍵3 callShouldRetry, Func
1 inBackoffAlternateCallbackMethod,時間跨度minBackoffForInBackoffCallback,的CancellationToken的CancellationToken,動作1 preRetryCallback) ShouldRetryResult.ThrowIfDoneTrying(ExceptionDispatchInfo capturedException) BackoffRetryUtility
1.ExecuteRetryAsync(FUNC1 callbackMethod, Func
3 callShouldRetry,FUNC1 inBackoffAlternateCallbackMethod, TimeSpan minBackoffForInBackoffCallback, CancellationToken cancellationToken, Action
1 preRetryCallback)CosmosDBDocumentStore。 GetChangeFeedDocuments[T](String&ContinuationToken, TimeSpan MaxAge, Int32 MaxRe sults) 第 94 行 projectName.GetChangeFeedDocuments[T](String& ContinuationToken, TimeSpan MaxAge, Int32 MaxResults) 第 1037 行 GetProjectNameChangedRecordingsCmd.ProcessRecord() 第 74 行 Cmdlet.DoProcessRecord() CommandProcessor.ProcessRecord()
終於想通了,這是一個異步等待問題。 沒有等待在我的構造函數和 dispose 中調用的方法,這就是我收到錯誤的原因。 通過添加 .GetAwaiter().Getresult() 修復它
public CosmosDataFixture()
{
ReadConfigAsync().GetAwaiter.GetResult();
}
public void Dispose()
{
DeleteDatabaseFromPowerShell().GetAwaiter.GetResult();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.