MsTest ClassInitialize 및 상속
다음과 같은 방식으로 구성된 테스트 용 기본 클래스가 있습니다.
[TestClass]
public abstract class MyBaseTest
{
protected static string myField = "";
[ClassInitialize]
public static void ClassInitialize(TestContext context)
{
// static field initialization
myField = "new value";
}
}
이제 다음 서명을 사용하여 기본에서 상속되는 새 테스트를 만들려고합니다.
[TestClass]
public class MyTest : MyBaseTest
{
[TestMethod]
public void BaseMethod_ShouldHave_FieldInitialized()
{
Assert.IsTrue(myField == "new value");
}
}
은 ClassInitialize
뭐라고입니다 ... 자식 시험에 의해 호출되지 않습니다 현실과 올바른 MSTEST에 상속 테스트 초기화를 사용하는 방법은?
불행히도 ClassInitializeAttribute 클래스 는 상속 될 수 없기 때문에 그렇게 할 수 없습니다.
상속 된 속성은이를 사용하는 클래스의 하위 클래스에서 사용할 수 있습니다. 는 ClassInitializeAttribute
상속 될 수 없으므로 MyTest
클래스가 초기화되면 클래스의 ClassInitialize
메서드를 MyBaseTest
호출 할 수 없습니다.
다른 방법으로 해결해보십시오. 덜 효율적인 방법은 ClassInitialize
메서드를 다시 정의 MyTest
하고 코드를 복제하는 대신 기본 메서드를 호출하는 것입니다.
잠재적 인 해결 방법은 AssemblyInitializeAttribute
대신 새 클래스를 정의하는 것입니다. 분명히 다른 범위를 가지고 있지만 나에게는 내 요구를 충족시킵니다 (모든 테스트 클래스와 테스트 방법에 대해 정확히 동일한 설정이 필요한 교차 절단 문제).
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace MyTests
{
[TestClass]
public sealed class TestAssemblyInitialize
{
[AssemblyInitialize]
public static void Initialize(TestContext context)
{
...
}
}
}
클래스가 실행될 때 클래스의 모든 [TestMethod]에 대해 클래스의 새 인스턴스가 생성된다는 것을 알고 있습니다. 이것이 발생할 때마다 기본 클래스의 매개 변수없는 생성자가 호출됩니다. 기본 클래스에 정적 변수를 만들고 생성자가 실행될 때 테스트 할 수는 없습니까?
이렇게하면 하위 클래스에 초기화 코드를 넣는 것을 잊지 않도록 도와줍니다.
이 접근 방식에 단점이 있는지 확실하지 않습니다.
이렇게 :
public class TestBase
{
private static bool _isInitialized = false;
public TestBase()
{
if (!_isInitialized)
{
TestClassInitialize();
_isInitialized = true;
}
}
public void TestClassInitialize()
{
// Do one-time init stuff
}
}
public class SalesOrderTotals_Test : TestBase
{
[TestMethod]
public void TotalsCalulateWhenThereIsNoSalesTax()
{
}
[TestMethod]
public void TotalsCalulateWhenThereIsSalesTax()
{
}
}
기본 클래스에서 정적 생성자를 사용 하시겠습니까? 설계 상 한 번만 실행되며 ClassInitializeAttribute와 같이 상속에 대한 이상한 제한이 없습니다.
참고 URL : https://stackoverflow.com/questions/15944504/mstest-classinitialize-and-inheritance
'UFO ET IT' 카테고리의 다른 글
루팅되지 않은 전화의 경우 USB 케이블없이 무선을 통한 Adb (0) | 2020.12.09 |
---|---|
ASP.NET MVC로 대용량 파일 업로드 스트리밍 (0) | 2020.12.09 |
Google Code Prettify를 호스팅하는 CDN (Content Delivery Network)이 있습니까? (0) | 2020.12.09 |
삭제되지 않은 객체에 대해 소멸자가 호출되는 이유는 무엇입니까? (0) | 2020.12.09 |
MySQL이 집계 함수없이 "그룹 별"쿼리를 허용하는 이유는 무엇입니까? (0) | 2020.12.09 |