TDD에는 다소 익숙합니다. 따라서 특정 답변뿐만 아니라 일반적인 조언도 취할 것입니다.추상 클래스의 AutoMoqCustomization이 작동합니까?
추상 클래스 나 인터페이스를 인스턴스화 할 수 없습니다. 분명히 Moq는 두 번째 테스트에서 ADataFeed의 조롱 된 인스턴스를 제공 할 수 있습니다. 왜 AutoMoqCustomization은 IDataFeed
인터페이스에서 작동하지만 추상 클래스 ADataFeed
에서는 작동하지 않고 InvalidOperationException을 던집니까?
2 차적으로, 자동 고정 접근법 (또는 일반적으로 TDD)은 생성자를 사용하여 추상 클래스를 호출하여 특정 값 (예 : 연결 문자열)을 필요로하고 보증하도록 설계하는 것일 수 있습니까?
[Theory, AutoMoqData]
public void AllDataFeedsHaveAConectionString(
IDataFeed sut)
{
var result = sut.GetConnectionString();
Assert.Null(result);
}
[Fact]
public void AllDataFeedsRequireAConnectionString()
{
var expected = Guid.NewGuid().ToString();
var sut = new Mock<ADataFeed>(expected);
var result = sut.Object.GetConnectionString();
Assert.Equal(expected, result);
}
[Theory, AutoMoqData]
public void AllDataFeedsRequireAConnectionString2(
[Frozen] string expected,
ADataFeed sut)
{
var result = sut.GetConnectionString();
Assert.Equal(expected, result);
}
'AutoMoqCustomization'은 추상 기본 클래스와 인터페이스를 제공 할 수 있습니다. 'ADataFeed'의 생성자가 public입니까? 그렇다면 보호하십시오. 그것은 추상적 인 클래스 public constructor에 대한 설계 에러입니다. –
VERY 흥미 롭습니다. 좋아, moq 추상 클래스에 public 생성자를 처리 ... autofixture하지 않습니다. 개인 생성자와 함께 작업하지 않으며 둘 다 보호 될 때 작동합니다. 나는 그것이 틀린 날이라는 또 다른 질문이다. 잠시 동안 나는 보호를 사용합니다. – cocogorilla
FTR : http://msdn.microsoft.com/en-us/library/vstudio/ms229047(v=vs.100).aspx –