代码合同并确保不引发异常

我想知道如果我能够使用Microsoft Code Contracts来验证方法不会抛出任何异常的不变性。 用例如下:我有一个附有记录器的导入器,其中导入器使用导入器的基类来定义导入的各个阶段:

  • 阅读文件;
  • 将数据存储到通用数据记录;
  • 从记录创建域对象;
  • 验证项目上下文中的域对象;
  • 在项目中放入有效的域对象。
  • 每个阶段都由该导入器基类的抽象方法表示。 我想确保每个阶段都不变,不会引发任何记录的异常。 Ergo,“读取文件”阶段应处理所有与文件访问有关的问题(例如DirectoryNotFoundException ),用记录器记录问题并返回null。

    实质上,我们希望通过记录器来传递问题。 并根据问题的严重程度,放弃进口,继续而忽略问题。

    我已经快速阅读了手册,但没有发现任何似乎可用于此的内容。 这是否可能? 或者这是不可能的,并且实际上我缺少一个很好的理由?


    我不认为有可能验证它不会抛出任何异常,因为异常可能源自运行时本身; 考虑OutOfMemoryException或StackOverflowException。

    事实上,我认为这就是为什么在一般情况下很难 - 如果您正确使用异常,那么它们通常会由程序的外部输入引起,因此无法验证。

    (如果这个异常是由程序中的错误引起的,那么你可能可以使用前提条件来捕捉它)

    其实,想一想,已经有一种编译器支持的方式来验证异常是被抛出还是被处理过......只是不在.NET中:D。 Java的检查异常似乎满足您的使用案例,但即使是Java自己的社区似乎也认为他们现在是个坏主意。

    链接地址: http://www.djcxy.com/p/59601.html

    上一篇: Code Contract and ensuring no exceptions are thrown

    下一篇: Code Contracts, null checks and value/reference types