小编MBK*_*MBK的帖子

如何在单元测试中伪造 DbEntityEntry<T> Entry(T实体) 方法?

在我的控制器的单元测试中,我模拟了数据库上下文类,将一个假数据库上下文对象注入到控制器构造函数中。假上下文类具有假 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 表达式一起使用。如果您以前遇到过类似的问题,可以帮忙吗?

多谢。

c# unit-testing entity-framework mocking dbcontext

5
推荐指数
0
解决办法
3539
查看次数

ConnectRetryInterval和ConnectRetryCount实体框架SQL连接字符串设置是否会干扰执行策略?

我想知道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=&quot;data source=MySQLServer;initial catalog=My;integrated security=True;    ConnectRetryCount=4;ConnectRetryInterval=5; Connection Timeout=5; pooling=False;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
Run Code Online (Sandbox Code Playgroud)

另一个问题是有关DbExecutionStrategy / SqlAzureExecutionStrategy重试逻辑对ConnectRetryInterval&ConnectRetryCount的干扰。连接设置是否先重试,然后再执行策略?或者,连接设置和执行策略是否根据重试时间间隔彼此重试?

谢谢

c# sql entity-framework database-connection

5
推荐指数
1
解决办法
785
查看次数

具有物理根“”的应用程序“/LM/W3SVC/1/ROOT/”无法加载 clr 和托管应用程序

我的 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 应用程序池。有人可以帮忙吗?

asp.net-core asp.net-core-webapi

5
推荐指数
1
解决办法
2万
查看次数

嵌套调用异步函数如何工作?

我是异步编程的新手,我的问题可能看起来很傻.请问任何人,在下面的伪代码示例中解释异步调用是如何工作的?

    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)

据我所知,该程序的工作原理如下

  1. MyMethod()在无限循环中调用Method1()
  2. Method1()运行"在等待之前在Method1中执行某些操作"
  3. Method1()启动Method2()并将控制权返回给MyMethod()
  4. MyMethod()启动10000毫秒延迟并将控制权返回给其调用者
  5. Method2()完成"在await之前在Method2中执行某些操作",启动LongRunMethod()并将控制权返回给MyMethod1()
  6. Method1()完成"等待后在Method1中执行某些操作".之后有什么方法可以控制?
  7. LongRunMethod()完成了它的工作
  8. Method2()完成其工作.它是否将控制权返回给Method1()?
  9. 10000ms后,一切都从第1步开始重复.

我的问题是

  1. 以上步骤顺序是否正确?
  2. 在Method1()和Method2()完成第6步和第8步的工作后,有哪些方法可以控制?
  3. 如果LongRunMethod()运行时间超过10000毫秒会发生什么?

谢谢

c# asynchronous

3
推荐指数
1
解决办法
574
查看次数

如何最小化一个只读属性,其值取决于类方法调用?

我有一个界面,像这样

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# methods interface moq

2
推荐指数
2
解决办法
3242
查看次数