【问题标题】:How to write a simple testing case using XUnit?如何使用 XUnit 编写一个简单的测试用例?
【发布时间】:2023-03-27 21:59:01
【问题描述】:

完全是新的测试,我有一个这样的控制器:

public class CheckRegController : Controller
{
    private readonly ApplicationDbContext _context;
    private readonly AppSettings _appSettings;

    public CheckRegController(ApplicationDbContext context, IOptions<AppSettings> appSettings)
    {
        _context = context;
        _appSettings = appSettings.Value;
    }

    [HttpGet]
    public IActionResult Get(string var1, int numberusers)
    {
        //...
    }
}

现在我添加了一个测试项目,我在其中尝试使用 XUnit 和 Moq。我只是想创建一个控制器对象,就像我在一个非常简单的项目中所做的那样,但它在这个中不起作用。当我尝试时:

CheckRegController cr = new CheckRegController();

上面写着:

没有给出与所需形式相对应的参数 参数“上下文”的 'CheckRegController.CheckRegController(ApplicationDbContext, IOptions)' XUnitTestProjectOA

然后我尝试了:

var moqHome = new Mock<ApplicationDbContext>();

但我不知道这是对还是错,或者我需要做什么? 如何通过_context_appsettings??

【问题讨论】:

    标签: c# unit-testing moq asp.net-core-1.0 xunit.net


    【解决方案1】:

    你在正确的轨道上。模拟依赖项并将它们注入到被测对象中。

    //Arrange
    var dbmock = new Mock<ApplicationDbContext>();
    //...setup dbmock as needed to exercise test
    var options = new Mock<IOption<AppSetting>();
    var appSetting = new AppSetting {
        //...populate appSetting as needed to exercise test
    };
    options.Setup(_ => _.Value).Returns(appSetting);
    
    var sut = new CheckRegController(dbMock.Object, options.Object);
    var var1 = "testing";
    var numberusers = 2;
    
    //Act
    var actual = sut.Get(var1,numberusers)
    
    //Assert
    //...assert expected behavior to actual.
    

    我还建议抽象出上下文以使控制器更易于维护。

    【讨论】:

    • 这正是我想要的......但在 UnitTestProject 的情况下,我们使用 [TestMethod] 属性,通过单击测试用例,我们可以运行任何测试用例,但在 XUnitTestCase 中,我有 [Fact] 属性我无法运行测试用例?如何运行它?我正在使用命令:dotnet test -method namespace.projectname.methodname?但它不起作用。
    • 它给了我关于 dbmock.object 的错误 - Castle.DynamicProxy.InvalidProxyConstructorArgumentsException: '无法实例化类的代理:abc.Data.ApplicationDbContext.?
    • @Mogli 这就是为什么我建议抽象数据库上下文以提供更大的灵活性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-15
    • 2017-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多