클래스의 모의 객체 두 개를 만들려고하지만 같은 어셈블리 인 "FullName"을 가진 두 개의 모의 객체를 만듭니다.Rhino.Mocks : 다른 어셈블리 전체 이름을 사용하여 클래스의 스텁을 만드는 방법
public class MyClassA : SomeAbstractClass, ISomeInterface1, ISomeInterface2
{
public MyClassA(string someData) : base(someData)
{
//this property defined in base class
CheckId = GetType().FullName;
}
internal override string CheckId { get; }
}
public class TestClass
{
[Test]
public void TestMethod()
{
var stub1 = new MockRepository().StrictMock<MyClassA>("some data 1");
var stub2 = new MockRepository().StrictMock<MyClassA>("some data 2");
Assert.AreEqual(stub1.CheckId, stub2.CheckId);
}
}
위의 주장은 사실이며 거짓이라고 예상합니다.
CheckId를 제공하는 다른 인터페이스를 만들 수 있지만 프로덕션 코드와 동일한 환경을 만들고 싶습니다.
그래서 내 질문은 CheckId 속성이 다른 경우에도 rhino mock이 다른 개체에 대해 동일한 클래스 이름을 생성하는 이유입니다.
테스트 논리를 변경하지 않고 동일한 클래스의 다른 모의 인스턴스를 만들 수있는 다른 방법이 있습니까?
다른 세부 정보가 필요하면 알려 주시기 바랍니다. 미리 감사드립니다.
UPDATE :
해결하고자 내가 수동으로 속성을 업데이트하는 것보다 더 나은 솔루션을 발견했다. 제네릭 유형의 MyClassA를 만들면 문제가 해결됩니다. 아래에서 볼 수 있듯이;
public class MyClassA<TDummy> : SomeAbstractClass, ISomeInterface1, ISomeInterface2
{
public MyClassA(string someData) : base(someData)
{
//this property defined in base class
CheckId = GetType().FullName;
}
internal override string CheckId { get; }
}
public class TestClass
{
[Test]
public void TestMethod()
{
var mock1 = MockRepository.GenerateMock<MyClassA<int>>("some data 1");
var mock2 = MockRepository.GenerateMock<MyClassA<bool>>("some data 2");
Assert.AreEqual(stub1.CheckId, stub2.CheckId);
}
}
더미 유형이 다르기 때문에 생성 된 각각의 모의는 동일한 기본 유형의 다른 인스턴스입니다. 그리고 내가 예상 한대로 모든 단언은 거짓이다.
이것은 반성 오해입니다. 단언은 옳다. 반영 될 때 생성 된 두 클래스는 동일한 유형을 제공합니다. – Nkosi
제 목표는 다른 checkid (클래스 fullname 참조)를 사용하여 두 개의 모의 인스턴스를 만드는 것입니다. 그러나 백그라운드 모의 (mock) 로직에서 이해하는 것처럼, 리플렉션 중에 동일한 유형의 동일한 클래스 이름을 생성합니다. –