[英]Code Contract and ensuring no exceptions are thrown
我想知道我是否能够使用Microsoft代码合同来验证方法不会引发任何异常的不变性。 用例如下:我有一个带有记录器的导入器,该导入器使用一个用于导入器的基类来定义导入的各个阶段:
每个阶段都由该导入器基类的抽象方法表示。 我想确保每个阶段不变,不会抛出任何已记录的异常。 因此,“读取文件”阶段应处理所有与文件访问有关的问题(例如DirectoryNotFoundException
),使用记录器记录问题并返回null。
本质上,我们希望通过记录器解决问题。 然后根据问题的严重性,中止导入,然后继续忽略问题。
我已经快速阅读了该手册 ,但没有发现任何似乎有用的内容。 有可能吗? 还是不可能,实际上有一个很好的原因使我失踪了?
我认为不可能验证它没有引发任何异常,因为异常可以源自运行时本身。 考虑使用OutOfMemoryException或StackOverflowException。
实际上,我认为这就是通常情况下很难执行的原因-如果正确使用异常,则异常通常是由程序的外部输入引起的,因此无法进行验证。
(如果异常是由程序中的错误引起的,那么您可能可以使用前提条件来捕获该异常)
实际上,考虑一下,已经有一种编译器支持的方法来验证是否引发或处理了异常……只是不在.NET:D中。 Java的经过检查的异常似乎可以满足您的用例,但是即使Java自己的社区似乎也认为它们在当今是一个坏主意。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.