Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.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# 我想为这个控制器创建Xunit测试。我该怎么做_C#_Unit Testing_Testing_Xunit_Servicetestcase - Fatal编程技术网

C# 我想为这个控制器创建Xunit测试。我该怎么做

C# 我想为这个控制器创建Xunit测试。我该怎么做,c#,unit-testing,testing,xunit,servicetestcase,C#,Unit Testing,Testing,Xunit,Servicetestcase,我已经创建了一个小型的xunit测试用例,但我不知道如何创建我在下面提到的这个控制器 public class PropertyController : ControllerBase { private readonly IMediator _mediator; private readonly ILogger<PropertyController> _logger; public PropertyController

我已经创建了一个小型的xunit测试用例,但我不知道如何创建我在下面提到的这个控制器

    public class PropertyController : ControllerBase
    {
        private readonly IMediator _mediator;
        private readonly ILogger<PropertyController> _logger;

        public PropertyController(IMediator mediator, ILogger<PropertyController> logger)
        {
            _mediator = mediator ?? throw new ArgumentNullException(nameof(mediator));
            _logger = logger ?? throw new ArgumentNullException(nameof(logger));
        }
        public async Task<IActionResult> AddProperty([FromBody] AddPropertyCommand command)
        {
            bool commandResult = false;
            _logger.LogInformation(
                "----- Sending command: {CommandName} - {IdProperty}: {CommandId} ({@Command})",
                command.GetGenericTypeName(),
                nameof(command.ModifiedUserId),
                command.ModifiedUserId,
                command);
            commandResult = await _mediator.Send(command);
            if (!commandResult)
            {
                return BadRequest();
            }
            return Ok();
        }
公共类属性控制器:ControllerBase
{
专用只读IMediator\u中介;
专用只读ILogger\u记录器;
公共属性控制器(IMediator中介器、ILogger记录器)
{
_mediator=mediator??抛出新的ArgumentNullException(nameof(mediator));
_logger=logger??抛出新的ArgumentNullException(name of(logger));
}
公共异步任务AddProperty([FromBody]AddPropertyCommand命令)
{
bool commandResult=false;
_logger.login信息(
“----发送命令:{CommandName}-{IdProperty}:{CommandId}({@command})”,
command.GetGenericTypeName(),
nameof(command.ModifiedUserId),
command.ModifiedUserId,
指挥部);
commandResult=wait\u mediator.Send(命令);
如果(!commandResult)
{
返回请求();
}
返回Ok();
}
我已经这样创建了。我已经模拟了依赖关系,并为add命令是否正常工作创建了一个测试用例
公共类PropertyController测试
{
私有只读属性控制器;
私有只读Mock\u mediatorMock;
私有只读模拟日志属性控制器锁;
公共属性控制器测试()
{
_mediatorMock=新Mock();
_loggerPropertycontrollerMock=new Mock();
_它=新的PropertyController(\u mediatorMock.Object,\u loggerPropertycontrollerMock.Object);
}
[事实]
public void it_应_添加_信息_成功_并返回_200_状态_结果()
{
//如何编写xunit测试用例。我正在这样创建
_mediatorMock.Setup(x=>x.Send().Returns(属性);
}

下面的测试涵盖了200状态结果-针对错误请求的类似测试将非常相似

[Fact]
public void it_Should_add_information_successfully_and_returns_200_status_result()
{
    // Arrange
    var expected = new AddPropertyCommand();
    _mediatorMock.Setup(x => x.Send(It.IsAny<AddPropertyCommand>())).Returns(true);

    // Act
    var actionResult = _it.AddProperty(expected);

    // Assert
    actionResult.ShouldBeAssignableTo<OkResult>();

    _mediatorMock.Verify(x => x.Send(expected));
}
[事实]
public void it_应_添加_信息_成功_并返回_200_状态_结果()
{
//安排
var expected=new AddPropertyCommand();
_mediatorMock.Setup(x=>x.Send(It.IsAny())。返回(true);
//表演
var actionResult=_it.AddProperty(预期);
//断言
actionResult.ShouldBeAssignableTo();
_mediatorMock.Verify(x=>x.Send(预期));
}

注意:
actionResult.ShouldBeAssignableTo();
是使用Shouldly断言框架编写的,您可以将其替换为任何您喜欢的内容。XUnit中内置的是这样的:
Assert.IsType(typeof(OkResult),actionResult);

您想从这个操作方法测试什么?我想测试添加方法将您的测试用例代码作为文本而不是图像(就像您对PropertyController类所做的那样)我已经添加了PropertyController测试文件非常感谢,但是我遇到了错误:-名称“Arg”在当前上下文中不存在对不起-
It.IsAny()
我在Moq和NSubstitute之间交换,总是弄不清楚这些事情,我会更新我的答案。非常感谢。它工作得很好。但我有一个问题。这里我们有两个模拟依赖项,所以我们必须在Testcase中设置其他依赖项?当使用Moq和模拟依赖项时,如果没有设置,调用将返回null因此,您只需在以下情况下设置其他模拟调用你关心它需要做什么,或者b)不设置它会阻止你达到你想要测试的位置。我建议只设置你在特定测试中需要的东西,否则你的测试会变得更难维护和阅读。测试中的代码越少越好-一般来说!
[Fact]
public void it_Should_add_information_successfully_and_returns_200_status_result()
{
    // Arrange
    var expected = new AddPropertyCommand();
    _mediatorMock.Setup(x => x.Send(It.IsAny<AddPropertyCommand>())).Returns(true);

    // Act
    var actionResult = _it.AddProperty(expected);

    // Assert
    actionResult.ShouldBeAssignableTo<OkResult>();

    _mediatorMock.Verify(x => x.Send(expected));
}