在我的控制器的单元测试中,我模拟了数据库上下文类,将一个假数据库上下文对象注入到控制器构造函数中。假上下文类具有假 DBSet 类,并且它们工作正常。但是,我不知道如何伪造 POST 单元测试的 DbEntityEntry.Entry() 方法。简化的POST方法代码如下
[ResponseType(typeof(Trip))]
public async Task<IHttpActionResult> PostTrip(Trip trip)
{
db.Trips.Add(trip);
await db.SaveChangesAsync();
//Load driver user object
db.Entry(trip).Reference(x => x.User).Load();
var tripDTO = new TripDTO()
{
Id = trip.Id,
Status = trip.Status,
BookedSeats = trip.BookedSeats,
DriverName = trip.User.Name,
};
return CreatedAtRoute("DefaultApi", new { id = trip.Id }, tripDTO);
}
Run Code Online (Sandbox Code Playgroud)
显然,我必须以某种方式模拟 DbEntityEntry.Entry() 方法,以使 db.Entry(trip).Reference() 方法能够与 LINQ 表达式一起使用。如果您以前遇到过类似的问题,可以帮忙吗?
多谢。
我想知道ConnectRetryInterval和ConnectRetryCount实体框架SQL连接字符串设置是否使EF重试数据库失败的更新。请参阅带有以下设置的EF连接字符串示例
<add key="MyConnectionString" value ="metadata=res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl;provider=System.Data.SqlClient;provider connection string="data source=MySQLServer;initial catalog=My;integrated security=True; ConnectRetryCount=4;ConnectRetryInterval=5; Connection Timeout=5; pooling=False;multipleactiveresultsets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
Run Code Online (Sandbox Code Playgroud)
另一个问题是有关DbExecutionStrategy / SqlAzureExecutionStrategy重试逻辑对ConnectRetryInterval&ConnectRetryCount的干扰。连接设置是否先重试,然后再执行策略?或者,连接设置和执行策略是否根据重试时间间隔彼此重试?
谢谢
我的 Web API 在 Windows Server 2016 上的 IIS v.10 中大部分时间运行正常。但是,时不时会出现错误,我无法找出错误源或原因。对应的Windows Logs/Application错误日志记录如下
Application '/LM/W3SVC/1/ROOT/MyWebAPI' with physical root '....\MyWebAPI\' failed to load clr and managed application.
Managed server didn't initialize after 120000 ms.
Process Id: 4840.
File Version: 12.2.19169.6. Description: IIS ASP.NET Core Module V2 Request Handler. Commit: e7f262e33108e92fc8805b925cc04b07d254118b
Run Code Online (Sandbox Code Playgroud)
该错误会导致客户端出现HTTP 错误 500.30 - ANCM 进程内启动失败。之后,MyWebAPI 停止工作,我必须手动回收 MyWebAPI 应用程序池。有人可以帮忙吗?
我是异步编程的新手,我的问题可能看起来很傻.请问任何人,在下面的伪代码示例中解释异步调用是如何工作的?
public async Task MyMethod()
{
while(true)
{
await Method1();
//do something in MyMethod
await Task.Delay(10000);
}
}
private async Task Method1()
{
//do something in Method1 before await
await Method2();
//do something in Method1 after await
}
private async Task Method2()
{
//do something in Method2 before await
await LongRunMethod();
}
Run Code Online (Sandbox Code Playgroud)
据我所知,该程序的工作原理如下
我的问题是
谢谢
我有一个界面,像这样
public interface IContent
{bool IsCheckedOut {get; };
void CheckOut();
}
Run Code Online (Sandbox Code Playgroud)
CheckOut() 方法影响属性 IsCheckedOut 返回的值。例如,IsCheckedOut 返回 false,直到调用 CheckOut() 方法。之后,IsCheckedOut 属性返回 true。我想测试像这样的 CheckOut 方法
[TestMethod]
public void CheckOutSetsCheckedOutStatusToTrue()
{
var content = new Mock <IContent>();
// test mock CheckOut() method, something like this
content.Setup(x => x.CheckOut());
content.Object.CheckOut();
// Verify
Assert.AreEqual(true, content.IsCheckedOut); //Test works as expected
}
Run Code Online (Sandbox Code Playgroud)
有谁知道我该如何做到这一点?
多谢。
c# ×4
asp.net-core ×1
asynchronous ×1
dbcontext ×1
interface ×1
methods ×1
mocking ×1
moq ×1
sql ×1
unit-testing ×1