有谁知道是否可以WebApplicationFactory<TStartop>()
在同一单元测试中托管多个实例?
我已经尝试过并且似乎无法解决这一问题。
IE
_client = WebHost<Startup>.GetFactory().CreateClient();
var baseUri = PathString.FromUriComponent(_client.BaseAddress);
_url = baseUri.Value;
_client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
"Bearer", "Y2E890F4-E9AE-468D-8294-6164C59B099Y");
WebHost
只是一个帮助器类,它使我可以轻松地在同一行中建立工厂,然后建立一个客户。
在幕后,它所做的就是:
new WebApplicationFactory<TStartup>()
但是还有其他一些事情。
如果我能站起来另一个Web服务器的另一个实例来测试服务器到服务器的功能,那就 太好了。
有人知道这是否可行吗?
不,不可能。WebApplicationFactory
依靠xUnit's IClassFixture
,它必须在类级别应用,这意味着你只能对苹果一口气。它WebApplicationFactory
本身可以针对每个测试进行定制,可以满足大多数需要“不同”测试案例的用例,但是这并不能帮助你同时需要两个完全独立的活动测试服务器。
但是,这就是说,你首先要的是不良的测试设计。测试的全部目的是消除变量,以便你实际上可以确保SUT的一部分在正常工作。即使在集成测试环境中,你仍然只是在查看应用程序各部分之间的特定交互。有两台互相提供帮助的测试服务器,可以有效地将变量相乘,从而不能保证任何一方都能正常工作。
足够公平-我有两个webapi,一个充当网守,另一个在发送请求通过....之前发送查询请求等,因此从本质上讲,我是在同一域中工作并测试一种功能。我明白您的意思,但对我来说确实需要两台测试服务器。我将不得不诉诸其他服务器的呼叫!是一个拉伸TBH
仍然不需要一次配置两台服务器。依赖您的“网守”服务的任何应用程序都可以将其代理请求转发到另一服务上,而不必担心。他们只需要一个响应,那是来自网守的。因此,针对这些服务的测试仅涉及网守服务,而不涉及您的其他服务。然后,您只需要对网守服务本身进行测试,以确保它正确地将请求代理到其他服务。在每种情况下,都将由一台测试服务器来完成。
你好,@ ChrisPratt。您在这里所做的就是将单元测试原理应用于集成测试。您所建议的隔离恰恰是针对单元测试的目的,而恰恰是不针对集成测试的目的。集成测试是针对基础资源的有意测试,为什么这不适用于其他服务?
@jefffischer:不正确。集成测试是从字面上测试各个单元之间的集成。您所描述的是系统测试,完全不同。
我明白您在说什么,但是从我所看到的来看,“整合测试”的含义已被我所从事过的几乎所有团队的功能测试所取代。您是说您的团队不使用集成测试来表示功能测试?尽管我不同意该术语,但是@ChrisPratt就是我所见过的全部。