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 次 |
最近记录: |