C# 我该把我的嘲弄放在哪里?
我正在努力让mock正常工作,我想知道人们通常把他们的mock类放在哪里。我似乎有三个基本的选择,但没有一个可行 我可以将它们放在应用程序集本身中,在这种情况下,它们随应用程序一起提供,这看起来很糟糕,但它们在最终构建期间可用于单元测试,并且没有循环引用。这似乎是最简单的方法 我可以创建一个单独的模拟程序集,以便它们在单元测试期间可用,可以从应用程序和测试应用程序中使用,但我最终不得不将所有实际类型移动到此程序集,或者创建循环引用 我可以将它们放在测试程序集中,但是它们不能从应用程序本身使用,因此我不能将它们用作构建应用程序块的过程C# 我该把我的嘲弄放在哪里?,c#,mocking,C#,Mocking,我正在努力让mock正常工作,我想知道人们通常把他们的mock类放在哪里。我似乎有三个基本的选择,但没有一个可行 我可以将它们放在应用程序集本身中,在这种情况下,它们随应用程序一起提供,这看起来很糟糕,但它们在最终构建期间可用于单元测试,并且没有循环引用。这似乎是最简单的方法 我可以创建一个单独的模拟程序集,以便它们在单元测试期间可用,可以从应用程序和测试应用程序中使用,但我最终不得不将所有实际类型移动到此程序集,或者创建循环引用 我可以将它们放在测试程序集中,但是它们不能从应用程序本身使用,因
我倾向于尝试使用mock来帮助开发系统以及测试部件,因此我发现很难知道将它们放在哪里。此外,所有最终版本的代码都必须通过单元测试过程运行,因此我需要在构建周期中提供模拟 有没有人对模拟课程应该放在哪里有什么想法 谢谢你的帮助
T您的模拟应该放在单元测试项目中。应用程序不应依赖于模拟对象。通常,您的应用程序将使用接口,而您的mock将实现这些接口。您的应用程序不需要也不应该引用您的测试项目。我们在项目上所做的是识别内部的和外部的依赖关系。内部依赖项的模拟放在单元测试项目中(如果在整个解决方案中使用,则放在单独的模拟项目中)。外部依赖项的模拟进入应用程序本身,然后用于部署和集成测试 外部依赖关系是一种环境性的东西——所以,Active Directory、web服务、数据库、记录器,诸如此类的东西。依赖项注入的处理方式与此相同——外部依赖项在配置文件中定义,因此我们可以轻松地选择在运行时要使用的依赖项
内部依赖几乎是其他一切。模拟应该保存在一个单独的项目中。我们一共有3种选择
查看
InternalsVisibleTo
assembly属性;它将改进您的选项:“我倾向于尝试使用mock来帮助开发系统”——这似乎有些奇怪。当然,给定的类要么是应用程序的一部分,要么是测试的一部分;但不是两者都有。@Flynn我已经在用了,谢谢@蒂姆-也许这就是我错的地方。当我有这些伟大的模拟等待使用的时候,总是不得不通过多层对话来开发我的系统,这似乎是一个巨大的耻辱。在前端工作之前,您是否发现系统的所有层都已经编码好了?这样您就永远不会使用模拟来加速和处理应用程序了?我开始在单元测试项目中使用它们,但如果我的应用程序总是要一直回到我的后端,而我的所有这些功能完美的模拟都在那里大声喊着要使用,这似乎是一种巨大的浪费。“所以你永远不会使用模拟来加速和处理你的应用程序?”不;将测试代码保留在应用程序之外。除了mock之外,你还有单元测试代码:这是不是需要使用?很抱歉这两个注释之间的重复,但是。。。单元测试代码和mock之间的关键区别在于,我的前端需要使用某种形式的后端服务和类,主要是在开发人员的其他层完成编码之前。在我的测试项目中,我已经有了一套很好的模拟工具,不能使用它们似乎是一件非常遗憾的事情。你发现在你开始前端工作之前,你下面的所有层都已经编码好了吗?@Tollo mocking框架,比如RhinoMocks,可以帮助你完成这项工作。Tim/Adriannp感谢你到目前为止的回复。Rhinomock能解决我的问题吗?把代码放在哪里?我没有看过它,但我的理解是它使模拟过程更简单,而不是解决了在开发和测试中使用模拟的问题。