Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我的MVC控制器测试是否应返回<;空的>;数据库中的对象?我做错什么了吗?_C#_Database_Unit Testing_Mocking_Fakeiteasy - Fatal编程技术网

C# 我的MVC控制器测试是否应返回<;空的>;数据库中的对象?我做错什么了吗?

C# 我的MVC控制器测试是否应返回<;空的>;数据库中的对象?我做错什么了吗?,c#,database,unit-testing,mocking,fakeiteasy,C#,Database,Unit Testing,Mocking,Fakeiteasy,我正在测试一些MVC控制器。我对这种特殊的测试方法比较陌生。当我模拟控制器和方法属性,然后执行该方法时,该方法返回。所以要么它应该这样做,要么我没有连接到数据库。我在app.config文件中添加了一些连接字符串和数据源,但运气不好。仍然返回 我的App.Config文件(代码段) 我的测试-在调用Assert.arame而不是.AreEqual时返回 [Test] public void GetContacts_ReturnContacts() { //Arrange va

我正在测试一些MVC控制器。我对这种特殊的测试方法比较陌生。当我模拟控制器和方法属性,然后执行该方法时,该方法返回
。所以要么它应该这样做,要么我没有连接到数据库。我在app.config文件中添加了一些连接字符串和数据源,但运气不好。仍然返回

我的App.Config文件(代码段)


我的测试-在调用Assert.arame而不是.AreEqual时返回

[Test]
public void GetContacts_ReturnContacts()
{
    //Arrange
    var mockContactManager = A.Fake<IContactManager>();
    var mockContext = A.Fake<CallerInfo>();
    var mockCallerInfoManager = A.Fake<ICallerInfoManager>();
    var mockSiteRepository = A.Fake<ISiteRepository>();
    var mockContactController = A.Fake<ContactController>();
    mockContext.SiteLocationCode = "US1";
    const int mockContactId = 168;

mockContext.ContactId = mockContactId;

List<Contact> expected = new List<Contact> { }; // What we expect to get back

A.CallTo(() => mockContactManager.GetContacts(mockContext.SiteLocationCode)).Returns(expected);

using (mockContactController = new ContactController(mockContactManager, mockCallerInfoManager, mockSiteRepository))
{
    //Act
    List<Contact> returnedContacts = mockContactController.GetContacts();

    //Assert
Assert.AreEqual(expected, returnedContacts);
    }
    }
[测试]
public void GetContacts_ReturnContacts()
{
//安排
var mockContactManager=A.Fake();
var mockContext=A.Fake();
var mockCallerInfoManager=A.Fake();
var mockSiteRepository=A.Fake();
var mockContactController=A.Fake();
mockContext.SiteLocationCode=“US1”;
const int mockContactId=168;
mockContext.ContactId=mockContactId;
List expected=新列表{};//我们希望得到什么
A.CallTo(()=>mockContactManager.GetContacts(mockContext.SiteLocationCode)).Returns(预期);
使用(mockContactController=新的ContactController(mockContactManager、mockCallerInfoManager、mockSiteRepository))
{
//表演
List returnedContacts=mockContactController.GetContacts();
//断言
Assert.AreEqual(预期、返回的联系人);
}
}
我的控制器

  [HttpPost]
    [ActionName("RetrieveContacts")]
    public List<Contact> GetContacts([FromBody]string query)
    {
        var context = GetContext();           
        return _contactManager.GetContacts(context.SiteLocationCode, query);
    }
[HttpPost]
[ActionName(“RetrieveContacts”)]
公共列表GetContacts([FromBody]字符串查询)
{
var context=GetContext();
返回_contactManager.GetContacts(context.SiteLocationCode,查询);
}

不确定要测试什么。如果模拟接口,它将不使用指定的任何数据库连接字符串。它是一个伪类,模拟接口而不做任何实际工作,只是为了传递给期望对象类型的函数。如果您想使用真实数据库,则不要使用模拟。

不确定您要测试什么。如果模拟接口,它将不使用指定的任何数据库连接字符串。它是一个伪类,模拟接口而不做任何实际工作,只是为了传递给期望对象类型的函数。如果您想使用真实数据库,请不要使用模拟。

谢谢!这回答了很多问题。很好的解释。我正在尝试测试“GetContacts”控制器方法--我是新来的,我做对了吗?谢谢GetContacts方法中确实没有逻辑,所以似乎没有什么可测试的。创建连接到数据库的实际IContactManager实例并将其与实际存储库实现一起传递给ContactController实例是有意义的。但是,如果您确实计划在GetContacts方法中使用逻辑,那么您可以使用mock,但请确保模拟存储库的方法以返回某种类型的数据(无需连接到数据库)。谢谢!这回答了很多问题。很好的解释。我正在尝试测试“GetContacts”控制器方法--我是新来的,我做对了吗?谢谢GetContacts方法中确实没有逻辑,所以似乎没有什么可测试的。创建连接到数据库的实际IContactManager实例并将其与实际存储库实现一起传递给ContactController实例是有意义的。但是,如果您确实计划在GetContacts方法中使用逻辑,那么您可以使用mock,但请确保模拟存储库的方法以返回某种类型的数据(不连接到数据库)。