Во-первых, это не модульный тест, потому что вы обращаетесь к какому-либо внешнему ресурсу.Модульные тесты должны иметь какие-либо внешние зависимости.Это действительно интеграционный тест.
Кроме того, на самом деле это не тестирование вашего кода для настройки cors, это тестирование того, что cors действительно работает.
При этом я попытался написать модульный тест для CORS и придумал это.Учитывая, что у меня есть класс, который настраивает CORS
public static class CorsConfig
{
public static void Register(HttpConfiguration config)
{
var cors = new EnableCorsAttribute(ConfigurationManager.AppSettings["CorsClientUrl"], "*", "*")
{
SupportsCredentials = true
};
config.EnableCors(cors);
}
}
Где мой AppSettings["CorsClientUrl"]
имеет значение "https://www.google.com"
Так что я хочу проверить, что cors настроен после того, как он вызванВсе мои модульные тесты основаны на SpecificationBase
, так что при написании тестов у меня немного больше синтаксиса в стиле BDD
[TestFixture]
public abstract class SpecificationBase
{
[SetUp]
public void SetUp()
{
Given();
When();
}
protected virtual void Given()
{
}
protected virtual void When()
{
}
}
public class ThenAttribute : TestAttribute
{
}
И конечные модульные тесты выглядят так:
public class WhenConfiguringCors : SpecificationBase
{
private HttpConfiguration _httpConfiguration;
private CorsPolicy _corsPolicy;
protected override void Given()
{
_httpConfiguration = new HttpConfiguration();
}
protected override void When()
{
CorsConfig.Register(_httpConfiguration);
var corsConfig = _httpConfiguration.Properties["MS_CorsPolicyProviderFactoryKey"] as AttributeBasedPolicyProviderFactory;
_corsPolicy =
corsConfig.DefaultPolicyProvider.GetCorsPolicyAsync(new HttpRequestMessage(), CancellationToken.None)
.Result;
}
[Then]
public void ShouldSetOrigin()
{
Assert.That(
_corsPolicy.Origins.Contains("https://www.google.com"), Is.True);
}
[Then]
public void ShouldSupportCredentials()
{
Assert.That(
_corsPolicy.SupportsCredentials, Is.True);
}
}