English 中文(简体)
具有校准的单位检测——不包括渔获
原标题:Unit testing with entlib - excluding catches

我采用某种方法,一般认为:

public bool Foo()
{
    try
    {
        // bar

        return true;
    }
    catch (FileNotFoundException)
    {
        // recover and complete
    }
    catch (OtherRecoverableException)
    {
        // recover and complete
    }
    catch (NonRecoverableException ex)
    {
        ExceptionPolicy.HandleException(ex, "LogException");
        return false;
    }
}

这种方法对完成至关重要,它有外部恢复步骤——这相对常见于将无法收回的接受抛在一边——它期望它退回不实的,现在无法完成报告,处理工作也随之进行。 不可收回的接受并不使该方案处于无效状态。

当Im单位测试和其中一项例外被推翻时,我发现错误:

Activation error occured while trying to get instance of type ExceptionPolicyImpl

我愿重申,为了获得实际的/原始的例外情况信息,而不是EntLib无法记录(实际上强迫不可收回的接受,并且具有[可收回的除外(类型)]]。 单位测试,以确保这种方法符合具体情况。

我怎么办?

edit Using preprocessor directives is not ideal as I hate seeing test-specific code in the codebase.

最佳回答

很难用“Entlib”静态镜子对你的代码进行测试。 在不改变你的法典的情况下,你的唯一答案是,在你的试卷中添加一 app子,并设立“Entlib”例外区,其政策无所作为。

然而,在Entlib 4(和5,我看到你再次使用)中,有另一种方式。 我们增加了一个实例切入点,具体来说就是要改进可检测性故事。 例外情况是例外情形。 采用这种方法非常简单。 选择一种例外的管理人员,然后将其称为非例外。 与此类似:

public class Whatever {
    private ExceptionManager exm;

    public Whatever(ExceptionManager exm) { this.exm = exm; }

    public bool Foo() {
        try {
            ... do whatever ...
        }
        catch(NonRecoverableException ex) {
            exm.HandleException(ex, "LogException");
            return false;
        }
    }
}

现在,你发现,在那里,你可以 mo弄例外情形(它是一个抽象的基类),在试验期间基本上不使用,无论是人工还是使用模拟物体框架。

如果您不希望强迫用户使用DI集装箱,你可以添加一个能够接收目前例外管理人的违约构造:

public class Whatever {
    private ExceptionManager exm;

    public Whatever() : this(EnterpriseLibraryContainer.Current.GetInstance<ExceptionManager>()) { }        
    public Whatever(ExceptionManager exm) { this.exm = exm; }
}

终端用户使用违约构造,你的测试使用一种在明确例外情形中采用的方法,而您的 h光是模拟任何用途。

所有区块现在都有这些“管理”班(如果是,是有意义的的话)。

问题回答

Hmm, 您可以重新制定法典,将一切放在试卷中,采用一种单独的方法,并召集你们的测试,以说这而不是现有的方法?





相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

热门标签