我目前正处于项目的集成测试阶段,在尝试测试端点以查看数据库是否返回一些任务时遇到了错误。我的域对象如下所示:
public class Task
{
public Guid Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
[Column(TypeName = "decimal(18,2)")]
public decimal? InitialPrice { get; set; }
}
我的端点的基本测试代码
[Fact]
public async Task Should_return_All_Tasks_with_ok_statusCode()
{
client.SetFakeBearerToken((object) token);
var response = await client.GetAsync("/api/v1/tasks");
response.StatusCode.Should().Be(HttpStatusCode.OK);
var json = await response.Content.ReadAsStringAsync();
var data = JsonConvert.DeserializeObject<List<Task>>(json);
data.Count.Should().BeGreaterThan(0);
}
当我运行测试时,我得到错误
Newtonsoft.Json.JsonReaderException: Could not convert string to integer: 64fa643f-2d35-46e7-b3f8-31fa673d719b. Path '[0].id', line 1, position 45.
我还尝试过使用ReadAsAsync<列表>((方法,我仍然得到相同的错误。
对im试图测试的端点的api调用将给出:
[
{
"id": "64fa643f-2d35-46e7-b3f8-31fa673d719b",
"title": "Garden Trimming in Lagos Ajah",
"description": "Please my garden needs trimmin, Im in lagos",
"initialPrice": 20.3
}
]
我将感谢的帮助
您将Task
类命名为与.Net框架中的System.Threading.Tasks.Task
对象相同的对象。System.Threading.Tasks.Task
具有int
-Id属性。要反序列化的代码实际上是试图将JSON反序列化为System.Threading.Tasks.Task
对象。
要解决此问题,您需要重命名Task
类(我建议这样做(,或者在调用JsonConvert.DeserializeObject
的代码行中指定Task
对象的全名,包括命名空间。