unit-testing - 为什么我的 ViewModel 不应该依赖于服务的具体实现?

标签 unit-testing mvvm dependency-injection mocking

我的 ViewModel 通常通过接口(interface)依赖于某些服务(DI 容器将注入(inject)实际的实现)。这样我就可以为 UnitTests 创建这些服务的模拟行为。

public class MyViewModel 
{
        public MyViewModel(IMyService myService)
        {
        }
}

但是我们存在一些模拟框架,例如 Moq ,即使没有接口(interface),您也可以在其中为服务的具体实现设置模拟行为。 这是否意味着 ViewModel 可以依赖于具体的服务类而不是接口(interface)? 除了 UnitTests 接口(interface)还有其他用途吗?

最佳答案

But we have some mocking framework exists like Moq, where you can setup mock behavior for your concrete implementations of services even without interfaces



不完全是。使用 Moq,您只能模拟可以覆盖/实现的东西。在大多数情况下,这将是一个接口(interface),但有时是一个具有虚拟/抽象方法的类。

现在,如果您的服务将方法公开为虚拟方法(问题是,他们为什么要这样做?)那么当然,您可以使用 Moq 并能够模拟它们。否则不行。

传递接口(interface)的重点是依赖抽象而不是具体实现。这是电话 SOLID原则 - Dependency Inversion Principle .

关于unit-testing - 为什么我的 ViewModel 不应该依赖于服务的具体实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28431362/

相关文章:

unit-testing - 测试非不透明错误值

python - 确保所有 Django View 返回 200?

android - 如何使用 Kotlin 和可待因结构在改造中拥有多个基本 URL

Service 中的 Android ViewModel(备选)

c# - 一个用于依赖注入(inject)(在 MVC 应用程序中)和简单 AOP 任务(使用属性)的框架

maven - 从 Azure 管道 maven 构建的单元测试访问安全变量

c# - "Soft updating"依赖属性?

c# - 将 Windsor Logging Facility 安装到图书馆中

c# - 无法从 Microsoft.Extensions.Logging 解析 ILogger

unit-testing - 如何用很少的单元对代码进行单元测试