///<summary> /// Initializes a new instance of the <see cref="ProjectFixture"/> class ///</summary> publicProjectFixture() { // 確保路徑跨平台運行 var baseDirectory = AppContext.BaseDirectory; var settingsFilePath = Path.Combine(baseDirectory, "TestSettings.json"); TestSettingProvider.FilePath = settingsFilePath; EnvironmentName = TestSettingProvider.GetEnvironmentName(typeof(ProjectFixture)); // Create Mock Server var mockServerSettings = TestSettingProvider.GetMockServerSettings(); _mockServerContainer = MockServerFixture.CreateContainer(mockServerSettings, EnvironmentName); }
internalstatic Uri MockServerEndpoint => new Uri(_mockServerContainer.GetEndpoint());
///<summary> /// Initializes this instance ///</summary> publicasync Task InitializeAsync() { usingvar cts = new CancellationTokenSource(TimeSpan.FromMinutes(5)); await _mockServerContainer.StartAsync(cts.Token); }
publicSampleControllerTests() { this.TestWebApplicationFactory = new TestWebApplicationFactory<Program>(); this.HttpClient = TestWebApplicationFactory.CreateDefaultClient(); }
[Fact(DisplayName = "GetAsync_應返回正確的資料")] publicasync Task GetAsync_ShouldReturnCorrectData() { // arrange var expectedResponse = new List<string> { "Item1", "Item2", "Item3" };
// 設置 MockServer 的模擬回應 var mockServerEndPoint = ProjectFixture.MockServerEndpoint; var mockServerClient = new MockServerClient(mockServerEndPoint.Host, mockServerEndPoint.Port); var mockServerRequest = new HttpRequest() .WithPath("/details") .WithMethod(HttpMethod.Get);
var mockServerResponse = new HttpResponse() .WithStatusCode(HttpStatusCode.OK) .WithHeader("Content-Type", "application/json") .WithBody(JsonSerializer.Serialize(new [] { "Item1", "Item2", "Item3" })) .WithDelay(TimeSpan.FromMilliseconds(100)); await mockServerClient.When(mockServerRequest) .RespondAsync(mockServerResponse); var url = "api/sample"; // act var response = await HttpClient.GetAsync(url);