在我的测试中,我需要测试当抛出OracleException (由于存储过程失败)时会发生什么。我想让犀牛摩克斯
Expect.Call(....).Throw(new OracleException());然而,无论出于什么原因,OracleException似乎都是密封的,没有公共构造函数。我能做些什么来测试这个?
编辑:就是我想要实例化的东西:
public sealed class OracleException : DbException {
private OracleException(string message, int code) { ...}
}发布于 2011-05-06 08:03:01
看来Oracle在以后的版本中更改了它们的构造函数,因此上面的解决方案将无法工作。
如果您只想设置错误代码,下面将为2.111.7.20执行以下操作:
ConstructorInfo ci = typeof(OracleException)
.GetConstructor(
BindingFlags.NonPublic | BindingFlags.Instance,
null,
new Type[] { typeof(int) },
null
);
Exception ex = (OracleException)ci.Invoke(new object[] { 3113 });发布于 2014-10-09 22:22:20
对于oracle的托管数据访问(v4.121.1.0),构造函数再次更改
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, "", "", "" });发布于 2008-09-23 17:30:04
以下是你是如何做到的:
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 });多亏了这么多的帮助,你的得票率很高。
https://stackoverflow.com/questions/122215
复制相似问题