내역 : nUnit 3. 복잡한 상속 테스트가 있습니다. 특정 개체가 SetUp
또는 OneTimeSetUp
내에 만들어집니다. 그 방법은 가상입니다. 이 개체가 닫히지 않으면 누수가 발생합니다.테스트와 동일한 어셈블리에서 유닛 확장을 사용합니다.
문제 : 개체는 TearDown
또는 OneTimeTearDown
파괴되지만 SetUp
또는 OneTimeSetUp
이 성공하면 그에만 호출된다. 따라서 TearDown
또는 OneTimeTearDown
의 예외가 발생하면 누수가 발생합니다. 앞서 언급했듯이 다중 상속 수준이 있으므로 예외 및 중요 객체 생성은 여러 클래스에서 서로 다른 스택 프레임에서 발생할 수 있습니다.
내가 원하는 작업 : 초기화가 완료되고 중요한 개체를 정리하기 전에 ITestEventListener
에 실패한 경우 반응하도록하고 싶습니다. I 클래스 만들어 내 테스트 어셈블리에 : 나는을 시도 무엇
그런
namespace My.Whatever.Tests.Web.Util
{
[Extension(EngineVersion = "3.4")]
public class NunitEventListener : ITestEventListener
{
public void OnTestEvent(string report)
{
Debug.WriteLine(report);
}
}
}
내가
- VS (NUNIT 3 테스트 어댑터)를 통해 테스트를 실행 시도를
- nUnit 콘솔
아무도 확장 프로그램을로드하지 못했습니다.
질문 : 내가 뭘 잘못하고 있니? 정보의
출처 : https://github.com/nunit/docs/wiki/Event-Listeners, https://github.com/nunit/docs/wiki/Writing-Engine-Extensions
Mr. Poole, 저는 이것을 답변으로 받아 들였습니다.하지만 내 사건과 관련하여 "테스트에 실패했습니다"라는 이벤트를 구독하는 다른 방법이있을 수 있습니까? 그렇지 않으면 지금까지 내가 볼 수있는 가장 쉬운 일은 AOP를 사용하거나 동적으로 IL을 내보내고 런타임에 코드를 패치하는 것입니다. –
내 대답은 업데이트를 참조하십시오. 테스트에 실패했음을 알리기 만하면 테스트 중 하나에서 테스트를 수행 할 수 있어야합니다. 특히, 마지막 분해 실행에서 수행하십시오. 이는 첫 번째 설정 실행에 해당합니다. 그 해체가 실행되지 않는 상황을 생각할 수 없습니다. – Charlie
안녕하세요. Mr Poole, 저는 여러 번 검증했고 다음 시나리오를 쳤습니다. 1) 내 테스트에 OneTimeSetUp 및 SetUp이 있습니다. 2) SetUp은 비어있는 기본 클래스의 가상 메소드입니다. 3) OneTimeSetup은 객체를 생성합니다. 4) 팀시 로그에 표시되는 내용 : SetUp Error는 OneTimeSetup을 가리키며 invalidOperationException은 개체 초기화 내에서 가리키고 OneTimeTearDown은 실행되지 않습니다. 내 oneTimeTearDown은이 경우를 예상하며 호출되면 실행됩니다 (로그 생성). 하지만 그렇지 않았습니다. –