小编Mar*_*ijn的帖子

如何单元测试 Core MVC 控制器操作是否调用 ControllerBase.Problem()

我们有一个控制器,它派生自这样ControllerBase的动作:

public async Task<ActionResult> Get(int id)
{
  try
  {
    // Logic
    return Ok(someReturnValue);
  }
  catch
  {
    return Problem();
  }
}

Run Code Online (Sandbox Code Playgroud)

我们还有这样的单元测试:

[TestMethod]
public async Task GetCallsProblemOnInvalidId()
{
  var result = sut.Get(someInvalidId);

}
Run Code Online (Sandbox Code Playgroud)

但是ControllerBase.Problem()抛出一个空引用异常。这是来自 Core MVC 框架的一个方法,所以我真的不知道它为什么会抛出错误。我认为可能是因为 HttpContext 为空,但我不确定。是否有一种标准化的方法来测试控制器应该调用的测试用例Problem()?任何帮助表示赞赏。如果答案涉及模拟:我们使用 Moq 和 AutoFixtrue。

c# unit-testing core controller-action asp.net-core-mvc

6
推荐指数
1
解决办法
1701
查看次数

当有route.paramMap.subscribe时,有什么理由使用route.snapshot.paramMap吗?

我想知道是否有任何理由使用

this.someProperty = this.route.snapshot.paramMap.get('someParam');
Run Code Online (Sandbox Code Playgroud)

代替

this.route.paramMap.subscribe((param) => 
{ 
  this.someProperty = param.get('someParam'); 
});
Run Code Online (Sandbox Code Playgroud)

queryParamMap 也是如此。

在我关注的教程中(由 Deborah Kurata 在 Pluralsight 上发布),他们似乎默认使用快照,并且仅当您期望参数更改而路线保持不变时才订阅。但应用程序往往会随着时间而改变。更改可能会导致参数发生变化而路线保持不变的情况。人们很容易忽视这种情况。

那么使用订阅而不是快照应该是(或者是)最佳实践吗?

快照方式写起来比较短,但是还有其他好处吗?

我可能在这里征求意见,但我想知道是否有官方的最佳实践。

提前致谢。

parameters query-string angular

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