【发布时间】:2018-12-11 17:43:32
【问题描述】:
当我通过邮递员调用 api 时,数据成功插入 mongodb。但我正在运行 xunit 测试类,它显示 mongodb 空异常。为什么我会遇到这个问题。以下是我的测试类和项目源码。
XUnit
[Fact]
public async void Test1()
{
JObject jObject = new JObject();
jObject.Add("name", "Satheesh");
jObject.Add("email", "sat@sat.com");
JObject finaljObject = new JObject();
finaljObject.Add("data", jObject);
Console.WriteLine("************ "+finaljObject);
var content = JsonConvert.SerializeObject(finaljObject);
var stringContent = new StringContent(content, Encoding.UTF8, "application/json");
// Act
var response = await _client.PostAsync("/api/Values/User", stringContent);
// Assert
var result = await response.Content.ReadAsStringAsync();
var responseString = await response.Content.ReadAsStringAsync();
Assert.Contains("Data Successfully Retrived", responseString);
}
项目来源
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
private readonly IMongoDatabase _database = null;
// GET api/values
public ValuesController(IOptions<Settings> settings)
{
try
{
var client = new MongoClient(settings.Value.ConnectionString);
if (client != null)
_database = client.GetDatabase(settings.Value.Database);
}
catch(MongoException e)
{
Console.WriteLine("DB Connection Error "+e.StackTrace);
}
}
[HttpPost]
[Route("User")]
public async Task <dynamic> RegisterUser([FromBody] JObject value)
{
//User Registeration
BsonDocument ReturnData = new BsonDocument();
try
{
dynamic jObject = JObject.FromObject(value);
dynamic data = jObject.data;
BsonDocument Document = BsonDocument.Parse(data.ToString());
_database.GetCollection<BsonDocument>("User").InsertOne(Document);
if(Document["_id"].AsObjectId != null)
{
return ReturnData.Add("message","Successfully Inserted").Add("Success",1).Add("data",Document["_id"].AsObjectId).ToJson();
}
else
{
return ReturnData.Add("message","Error During Insert Document").Add("Success",0).ToJson();
}
}
catch(Exception e)
{
Console.WriteLine(e.StackTrace);
return ReturnData.Add("message","Error").Add("Success",e.StackTrace).ToJson();
}
}
}
错误:
DB Connection Error at MongoDB.Driver.Core.Misc.Ensure.IsNotNull[T](T value, String paramName)
at MongoDB.Driver.Core.Configuration.ConnectionString..ctor(String connectionString)
at MongoDB.Driver.MongoUrlBuilder.Parse(String url)
at MongoDB.Driver.MongoUrl..ctor(String url)
at MongoDB.Driver.MongoClient..ctor(String connectionString)
at test3.Controllers.ValuesController..ctor(IOptions`1 settings)
如何解决这个问题。任何人都想帮助我。
谢谢...
【问题讨论】:
-
创建TestServer时如何初始化
Settings选项?我猜原因是您正在创建一个没有正确配置设置的 TestServer。 -
我就是这样做的 .private readonly HttpClient _client;公共 UnitTest1() { _server = new TestServer(new WebHostBuilder() .UseStartup
()); _client = _server.CreateClient(); } -
当我调试代码时,值不是从 appsettings 文件中获取的
-
我不太确定,但我现在正在测试您的代码,我猜原因是您正在从
appsetting.json配置Settings选项,但启动失败了t 加载它,因为您的项目根目录已更改为测试项目。 -
你能告诉任何解决方案吗
标签: c# asp.net-core .net-core asp.net-core-mvc xunit