English 中文(简体)
为单位测试创建非法参数类别的最佳方式
原标题:Abstract way to create an illegal parameter class for unit testing

我们一栏数据库的数据领域被绘制成一个数据领域。 在每一数据领域,均可采用<代码>GetValue<T>(>方法。

如果T 是非法的,就会出现一种例外。 在我的单位测试中,如果我通过非法的类型,就会发现一个例外? 我想到的下一个已知的非法类型? 或者有一种比较抽象的做法?

public object GetValue<T>()
{
    if (typeof(T) == typeof(string)) return ValueString;
    if (typeof(T) == typeof(int?)) return ValueInt;
    if (typeof(T) == typeof(double?)) return ValueDouble;
    if (typeof(T) == typeof(DateTime?)) return ValueDateTime;
    if (typeof(T) == typeof(bool)) return ValueBoolean == true;

    var ex = new Exception("Following type is not supported: " + typeof(T));
    Log.Error(ex);
    throw ex;
}

因此,每一类人都应放弃这一例外,如果它们已经通过的话。 因此,我需要一种礼貌,权利?

在我的单位测试时,我们期望:

[Fact]
public void If_T_is_illegal_type_an_exception_gets_thrown()
{
    _dataField = new DataField(_params);
    Assert.Throws<Exception>(() => _dataField.GetValue<Type>());
}
最佳回答

忽略这一单位的测试,正试图通过所有法典途径并确保正确的行为。 你应总共进行6次测试:一次是5种有效类型,一次是任何其他类型(正如你目前所做的那样)以涵盖最后的代码道路。 你们为什么需要更抽象的东西。

您可能更愿意使用明确的转换和投放,从而成为汇编时间测试而不是时间:

问题回答

目前,如果你打电话<代码>GetValue<bool>>,你的代码将用五倍的<代码>(T)进行5次比较。 然后,它会把箱子的ool豆价值作为物体退回。 最糟糕的是,这一方法的签字丝毫没有说明允许哪种类型,而这种形式将产生例外。 我能否打电话? 不详。 如果不允许,我就应该尝试,并且有时间例外。

2. 考虑为所需类型制定超负荷的方法:

bool GetBooleanValue()
decimal GetDecimalValue()

这完全描述了它能够返回的哪类。 如果内部链条没有很长的时间。 士兵不会收到物品。 你们将毫无问题地检验每一种方法。

如上文所述,对每一支助类型进行的一次检测和一次非支助型的检测应足够。

The one thing I do note though is that the exception is not the only expected result for the error. How are you verifying that the error is logged?
Do you have a way of doing this?
If not, do you want/need one?

Also, a totally unsolicited code review point... why

if (typeof(T) == typeof(bool)) return ValueBoolean == true; 

而不是

if (typeof(T) == typeof(bool)) return ValueBoolean; 

Alan。





相关问题
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. ...

热门标签