【发布时间】:2014-05-30 07:40:10
【问题描述】:
当我在特定代码库中编写测试时,我经常需要在我新添加的代码之前设置一个静态属性,并在离开时重新设置它。示例
public void SomeMethod(){
val oldVal = Notifier.DoNotify;
Notifier.DoNotify = false;
// Some code...
Notifier.DoNotify = oldVal;
}
我认为这种方式很难看,我想要更好的东西,这也使得忘记重新设置值变得更加困难。
我试着做点什么,得到了这个。我看到了一些好处,但这是一个非常有说服力的解决方案。
public class ValueHolder<T> : IDisposable
{
private readonly Action<T> setter;
private readonly T oldVal;
public ValueHolder(Func<T> getter, T tempVal, Action<T> setter)
{
this.setter = setter;
oldVal = getter();
setter(tempVal);
}
public void Dispose()
{
setter(oldVal);
}
}
然后像这样使用
public void SomeMethod(){
using(new ValueHolder<bool>(() => Notifier.DoNotify, false, (b) => Notifier.DoNotify(b)) {
// Do something ...
}
}
有什么好的解决办法?
(编辑删除了对测试的引用。似乎分散了我想问的内容)
【问题讨论】:
-
你最好希望你的测试不要并行运行......
-
也许codereview.stackexchange.com 更适合解决此类问题
-
你使用什么测试框架?通常有一种方法可以在测试方法之前和之后运行一些代码。
-
它看起来确实比手动重置值更好。不过,我会更改类的名称以专注于其重置行为。
-
感谢 cmets!虽然我不是在寻找如何使用测试框架来解决这个问题。我精通单元测试,但现在对学习 C# 更感兴趣
标签: c#