- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们目前正在用构建在 .NET3.5 中的现代 SOA WCF 系统替换一个有 20 年历史的基于 C 的系统。我们的行业需要严格的测试,包括良好的自动化单元测试集合。我们遇到了问题,但是对我们的 SOA 系统进行单元测试的程度接近于对基于 C 的系统进行单元测试的程度。
最大的一个问题是,系统中的大多数方法实际上都依赖于跨服务边界调用代码,例如,我们是大量数据驱动的,但我们不直接在系统内访问数据库:我们调用WCF 数据访问服务。
在 visual studio 中运行任何单元测试几乎是不可能的,因为几乎任何事情都会导致某种交叉服务调用。如果它不是数据访问它的其他服务之一。我估计我们可以获得大约 5% 的覆盖率。
我看到很多人都在为测试 SOA 而苦苦挣扎,所以我认为这并不是我们独有的。问题是 QA 会质疑我们为什么不对系统进行更多的单元测试。
老实说,我认为 VSTS 单元测试更像是一种回归测试,而不是一种验证(适合使用)工具。单元测试 SOA 有哪些选项?实现良好的覆盖率根据人们的经验是否现实?有没有办法模拟数据访问服务(或任何服务:注意我们不使用 WCF 代理),或者我们是否必须向 QA 解释单元测试能力在过去 20 年中已经倒退...
欢迎提出任何建议,我想这是一个普遍的意见问题。
最佳答案
我不得不说,对 SOA 进行单元测试与对其他任何事物进行单元测试非常相似。如果有的话,它应该更容易,因为它迫使您隔离依赖项。
单元测试不应该通常跨越服务边界。实际上,服务 的理念是它完全独立且不透明。您直接测试服务 - 不是通过 WCF channel ,而是通过单元测试组成服务的实际类。一旦您测试了服务本身(您应该能够获得接近 100% 的覆盖率),您就不需要将其参与客户端测试。
对于客户端单元测试,您模拟服务。 WCF 实际上使这对您来说变得非常容易,因为每个 WCF 客户端都实现一个接口(interface);如果您通常在代码中使用 FooService
或 FooServiceSoapClient
,请将其更改为使用相应的 IFooService
或 FooServiceSoap
代理类实现。然后您可以编写自己的 MockFooService
来实现相同的接口(interface)并在您的客户端测试中使用它。
有时让人们在这里绊倒的部分原因是服务可以根据特定消息做截然不同的事情。但是,涉及服务接口(interface)的客户端测试通常每次测试应该只测试一个或两个特定消息,因此很容易使用工具模拟给定客户端测试所需的确切请求/响应喜欢Rhino Mocks .
双工有点棘手,但请记住,双工服务也应该基于接口(interface);甚至 MSDN example引入了一个 ICalculatorDuplexCallback
。回调将是接口(interface),所以就像您可以在客户端模拟服务方法一样,您可以在服务端模拟客户端回调。只需拥有用于服务单元测试的模拟/假回调。
Mark Seeman 有一篇关于 Unit-Testing Duplex WCF Clients 的非常好的博客文章,示例代码和所有。您应该读一读,我认为它会对您有所帮助。
关于wcf - 对 SOA WCF 系统进行单元测试……发现很难获得合适的覆盖率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2359928/
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve th
我有一个带有输入字段的表单,使用javascript,当用户输入超过2个字符时,它会在第一个输入字段下方创建相同的输入字段。其代码是: Optie 1: 1 && treated[this.na
这是我的: char userInput; int position; vector userVector(7); vector someVector(7,1); cin >> userInput;
尝试使用 typescript 和 redux 构建一个简单的 react crud 应用程序并遇到以下问题。我有一个具有指定签名的函数,它将一个人对象作为参数,如此处所示。 export defau
哦,我多么希望 TCP 像 UDP 一样基于数据包! [查看评论] 但是,唉,事实并非如此,所以我正在尝试实现我自己的数据包层。这是到目前为止的事件链(忽略写入数据包) 哦,我的数据包结构非常简单:两
我想在我的页面底部放置一个包含不同数量图片的栏,这些图片(如果比页面宽)可以左右滚动。 页面宽度在变化,我希望 Pane 的宽度为 100%。 我试图通过让中间的 div 溢出并使用 jquery.a
我曾尝试在工作时将我的 Rails 应用程序 bundle 到我的 Mac 上。在家里它运行良好,我之前已经设法自己解决了它,但这次无论我尝试什么似乎都无法解决它。 我在运行 bundle/bundl
所以我有一个旧的网络表单站点,并且正在努力使其更易于维护。把它扔掉并重写它不是一种选择。 IoC 显然是它首先得到的东西之一,但这给我留下了服务定位器模式和糟糕的品味,并且想知道它是否可以做得更好。
我是一名优秀的程序员,十分优秀!