首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在没有公共构造函数的情况下模拟/伪造/存根密封的OracleException?

如何在没有公共构造函数的情况下模拟/伪造/存根密封的OracleException?
EN

Stack Overflow用户
提问于 2008-09-23 16:43:21
回答 9查看 3.3K关注 0票数 12

在我的测试中,我需要测试当抛出OracleException (由于存储过程失败)时会发生什么。我想让犀牛摩克斯

代码语言:javascript
复制
Expect.Call(....).Throw(new OracleException());

然而,无论出于什么原因,OracleException似乎都是密封的,没有公共构造函数。我能做些什么来测试这个?

编辑:就是我想要实例化的东西:

代码语言:javascript
复制
public sealed class OracleException : DbException {
  private OracleException(string message, int code) { ...}
}
EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2011-05-06 08:03:01

看来Oracle在以后的版本中更改了它们的构造函数,因此上面的解决方案将无法工作。

如果您只想设置错误代码,下面将为2.111.7.20执行以下操作:

代码语言:javascript
复制
ConstructorInfo ci = typeof(OracleException)
            .GetConstructor(
                BindingFlags.NonPublic | BindingFlags.Instance, 
                null, 
                new Type[] { typeof(int) }, 
                null
                );

Exception ex = (OracleException)ci.Invoke(new object[] { 3113 });
票数 4
EN

Stack Overflow用户

发布于 2014-10-09 22:22:20

对于oracle的托管数据访问(v4.121.1.0),构造函数再次更改

代码语言:javascript
复制
var ci = typeof(OracleException).GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance, null, new Type[] { typeof(int), typeof(string), typeof(string), typeof(string) }, null);
var c = (OracleException)ci.Invoke(new object[] { 1234, "", "", "" });
票数 8
EN

Stack Overflow用户

发布于 2008-09-23 17:30:04

以下是你是如何做到的:

代码语言:javascript
复制
    ConstructorInfo ci = typeof(OracleException).GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance, null, new Type[] {typeof(string), typeof(int)}, null);
    var c = (OracleException)ci.Invoke(new object[] { "some message", 123 });

多亏了这么多的帮助,你的得票率很高。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/122215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档