0
enter code here
我有一種在該方法中引發異常時記錄錯誤的方法。 該方法在單例內是非靜態的。如果方法在該方法中引發異常時記錄錯誤,則使用僞造測試
public object MethodA()
{
try
{
//code
SomeObj.Print(); //updated
}
catch (Exception ex)
{
log.Error(ex);
}
}
下面的單元測試代碼引發的NullReferenceException:
var fakeLogger = A.Fake<ILog>();
MySingleton.Instance.Initialize(fakeLogger);
A.CallTo(() => MySingleton.Instance.MethodA()
.Invokes((x) => { throw new Exception(); });
//.Throws(new Exception()); --even this doesnt work
A.CallTo(() => fakeLogger.Error(A<object>.Ignored)).MustHaveHappened();
Stack trace:
at FakeItEasy.Creation.CastleDynamicProxy.CastleDynamicProxyInterceptionValidator.GetReasonForWhyMethodCanNotBeIntercepted(MethodInfo method)
at FakeItEasy.Creation.CastleDynamicProxy.CastleDynamicProxyInterceptionValidator.MethodCanBeInterceptedOnInstance(MethodInfo method, Object callTarget, String& failReason)
at FakeItEasy.Creation.CastleDynamicProxy.CastleDynamicProxyGenerator.MethodCanBeInterceptedOnInstance(MethodInfo method, Object callTarget, String& failReason)
at FakeItEasy.Creation.ProxyGeneratorSelector.MethodCanBeInterceptedOnInstance(MethodInfo method, Object callTarget, String& failReason)
at FakeItEasy.Configuration.DefaultInterceptionAsserter.AssertThatMethodCanBeInterceptedOnInstance(MethodInfo method, Object callTarget)
at FakeItEasy.Configuration.FakeConfigurationManager.AssertThatMemberCanBeIntercepted(LambdaExpression callSpecification)
at FakeItEasy.Configuration.FakeConfigurationManager.CallTo(Expression`1 callSpecification)
at FakeItEasy.A.CallTo(Expression`1 callSpecification)
解決方案: 我不得不讓我的非假方法拋出一個異常,這是我如何做。
var fakeLogger = A.Fake<ILog>();
var someObject = A.Fake<SomeObject>();
MySingleton.Instance.Initialize(fakeLogger);
A.CallTo(() => someObject.Print()).Throws(new Exception()); //key
MySingleton.Instance.MethodA();
A.CallTo(() => fakeLogger.Error(A<object>.Ignored)).MustHaveHappened();
仍然給我一個空行參考異常行A.CallTo(()=> MySingleton.Instance.MethodA())。拋出(新的異常());「 – 2012-03-03 07:22:58
嗯...是MySingleton.Instance null? – 2012-03-04 05:15:45
謝謝!更新我的解決方案 – 2012-03-06 01:19:17