簡體   English   中英

整套單元測試用例通過,但如果我單獨運行它會失敗

[英]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)BackoffRetryUtility 1.ExecuteRetryAsync(Func 1 callbackMethod,Func鍵3 callShouldRetry, Func 1 inBackoffAlternateCallbackMethod,時間跨度minBackoffForInBackoffCallback,的CancellationToken的CancellationToken,動作1 preRetryCallback) ShouldRetryResult.ThrowIfDoneTrying(ExceptionDispatchInfo capturedException) BackoffRetryUtility 1.ExecuteRetryAsync(FUNC 1 callbackMethod, Func 3 callShouldRetry,FUNC 1 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM