.Net Core Unit Unitting - PullRequest
       16

.Net Core Unit Unitting

0 голосов
/ 27 октября 2018

У меня есть веб-интерфейс, как показано ниже, который вызывается из моего angularjs UI.

public class ValuesController : Controller
{
    private static string dynamoDbTable = string.Empty;
    private readonly IDynamoDbManager<MyModel> _dynamoDbManager;

    public ValuesController(IOptions<Dictionary<string, string>> appSettings, IDynamoDbManager<MyModel> dynamoDbManager)
    {
        var vals = appSettings.Value;
        dynamoDbTable = vals["dynamoDbTable"];
        _dynamoDbManager = dynamoDbManager;
    }

[HttpGet("api/data")]
public async Task<IActionResult> GetAllData(string status, string role)
{
    List<ScanCondition> conditions = new List<ScanCondition>();
    conditions.Add(new ScanCondition("status", ScanOperator.Contains, status));
    conditions.Add(new ScanCondition("role", ScanOperator.Contains, role));

    List<MyModel> model = new List<MyModel>();
    model = await _dynamoDbManager.GetAsync(conditions);            

    return Ok(model);
}

[HttpPost("api/save")]
public async Task<IActionResult> SaveData([FromBody] List<MyModel> listData, string input, string name, string type)
{
    List<MyModel> model = new List<MyModel>();
    foreach (var data in listData)
    {
        //populating data here and saving
         await _dynamoDbManager.SaveAsync(data);
    }
    return Ok();
}
}

}

Теперь я хочу написать контрольные примеры для моих конечных точек API. Я не писал ни одного модульного теста, прежде чем нужно вводить в этом. Я прочитал основную документацию xunit здесь.

Вот мой пример теста:

public class ValuesControllerTests
{
    private Mock<IDynamoDbManager<MyModel>> _dbManager;
    private ValuesController _valueController;

    public ValuesControllerTests()
    {
        var mockRepository = new MockRepository(MockBehavior.Loose);
        _dbManager = mockRepository.Create<IDynamoDbManager<MyModel>>();
        var options = new OptionsWrapper<Dictionary<string, string>>(new Dictionary<string, string>()
        {
            {"dynamoDbTable", nameof(MyModel) }
        });
        _valueController = new ValuesController(options, _dbManager.Object);
    }

[Fact]
public async Task GetAllData_Test()
{
    var searchResult = new List<MyModel>()
    {
        new MyModel(){ }
    };

     //Here I am trying to use MOQ but this is not working fine
    _dbManager
     .Setup(_ => _.GetAsync(It.IsAny<List<ScanCondition>>()))
     .ReturnsAsync(searchResult);

    var result = _valueController.GetAllData("new", "admin");
    Assert.IsType<OkObjectResult>(result.Result);            
} 
}
 }

Могу ли я проверить свой метод без использования moq, если да, то как я могу это сделать? Потому что с moq я не могу проверить. Во-вторых, выше тестовый пример я просто проверяю, возвращает ли метод API все в порядке. Какие другие тестовые случаи я могу написать для моего метода получения и сохранения.

Я также создал проект git на тот случай, если кто-нибудь захочет взглянуть на проект: https://github.com/kj1981/xunit

Буду признателен, если кто-нибудь сможет мне помочь в этом.

- Добавлен -

Я также попробовал один тест, как показано ниже, но это нормально? Может быть, мое мышление не так, с тестом ниже я думал, что это не удастся, но это не так.

     [Fact]
    public async Task GetAllData_Test()
    {
        var searchResult = new List<MyModel>()
        {
            new MyModel(){ Id ="1", Name = "Adam", Role = "User", Status ="old" },
            new MyModel(){ Id ="2", Name = "Gary", Role = "Admin", Status ="new" }
        };

        _dbManager
         .Setup(_ => _.GetAsync(It.IsAny<List<ScanCondition>>()))
         .ReturnsAsync(searchResult);

        var okResult = _valueController.GetAllData("fail", "none").Result as OkObjectResult; ;
        var items = Assert.IsType<List<MyModel>>(okResult.Value);
        Assert.Equal(2, items.Count);
    }

Кто-нибудь с входами?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...