【发布时间】:2021-04-05 04:16:35
【问题描述】:
目标:
单元测试方法TestMethod1只能用于开发和测试阶段。
如果在生产阶段使用,一切都会被取消或类似的。
问题:
当我尝试从 useEnvironment() 方法中删除字符串值“Development”时,代码仍然有效。
是否可以在开发和测试阶段而不是在生产阶段激活单元测试?
信息:
*源码取自https://www.meziantou.net/testing-an-asp-net-core-application-using-testserver.htm
*请考虑到您可能有大约 500 个单元测试。
*使用asp.net core mvc v3
谢谢!
------
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.TestHost;
using System;
using System.Collections.Generic;
using System.Text;
using Xunit;
using System.Net.Http;
using System.Threading.Tasks;
using Testtest;
namespace XUnitTestProject1.Test
{
/// <summary>
/// https://www.meziantou.net/testing-an-asp-net-core-application-using-testserver.htm
/// </summary>
public class Tests
{
[Fact]
public async Task TestMethod1()
{
var webHostBuilder =
new WebHostBuilder()
.UseEnvironment("Development") // You can set the environment you want (development, staging, production)
.UseStartup<Startup>(); // Startup class of your web app project
using (var server = new TestServer(webHostBuilder))
using (var client = server.CreateClient())
{
string result = await client.GetStringAsync("/api/values");
Assert.Equal("[\"value1\",\"value2\"]", result);
}
}
}
}
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Testtest.Controllers
{
/// <summary>
/// ValuesController
/// </summary>
[ApiController]
[Route("api/[controller]")]
public class ValuesController : Controller
{
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
}
}
更新:
[CustomTestsFact]
[Fact]
public async Task TestMethod2()
{
using (var client = _server.CreateClient())
{
string result = await client.GetStringAsync("/api/values");
Assert.Equal("[\"value1\",\"value2\"]", result);
}
}
【问题讨论】:
标签: c# unit-testing asp.net-core-mvc asp.net-core-3.1