p3t*_*tch 6 c# unit-testing moq blazor
按照这个原型进行单元测试,我在使用 JS 互操作时遇到了问题。
[Test]
public void ExampleTest()
{
var component = host.AddComponent<MyComponent>();
}
Run Code Online (Sandbox Code Playgroud)
只是添加一个使用 IJSRuntime 的组件会导致以下异常
System.InvalidOperationException:无法为“Application.Components.MyComponent”类型的属性“JsRuntime”提供值。没有“Microsoft.JSInterop.IJSRuntime”类型的注册服务。
JS 互操作没有做任何有趣的事情,它只是一个关注元素的 void 函数 - 我不在乎测试它,我只想继续为组件本身编写测试。
如何使用 Moq 来模拟 IJSRuntime?
当我尝试类似的东西时
[Test]
public void ExampleTest()
{
var jsRuntimeMock = new Mock<IJSRuntime>();
host.AddService(jsRuntimeMock);
var component = host.AddComponent<MyComponent>();
}
Run Code Online (Sandbox Code Playgroud)
我仍然得到例外
host.AddService(jsRuntimeMock);
Run Code Online (Sandbox Code Playgroud)
注册Mock<IJSRuntime>为依赖项。
实现中的任何类(在测试程序集之外)都不应该有这样的依赖关系,但这是一个常见的错误。
IJSRuntime使用Mock<T>属性注册为依赖项,该属性Object包含对实现接口的对象的引用。
像这样:
host.AddService(jsRuntimeMock.Object);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
983 次 |
| 最近记录: |