/// <summary>
/// Initializes a new instance of the <see cref="MemberBuildContextBase"/> class.
/// </summary>
/// <param name="codeNamespace">The code namespace.</param>
/// <param name="testClassDeclaration">The test class declaration.( early testObject ).</param>
/// <param name="typeMember">The current type to create a test method for.</param>
/// <param name="buildData">The additional build data lookup.</param>
/// <param name="setUpTearDownContext">Contains data specific to SetUp and TearDown test-methods.</param>
/// <param name="baseKey">The base string of the <see cref="TestKey"/>. Is amended by the
/// <paramref name="codeNamespace"/> identifier, normalized and fixed by a <see cref="KeynameFixer"/>.</param>
protected MemberBuildContextBase(
CodeNamespace codeNamespace,
CodeTypeDeclaration testClassDeclaration,
CodeTypeMember typeMember,
BuildDataDictionary buildData,
ISetupAndTearDownContext setUpTearDownContext,
string baseKey)
{
Guard.NotNull(() => codeNamespace, codeNamespace);
Guard.NotNull(() => testClassDeclaration, testClassDeclaration);
Guard.NotNull(() => typeMember, typeMember);
Guard.NotNull(() => buildData, buildData);
Guard.NotNull(() => setUpTearDownContext, setUpTearDownContext);
Guard.NotNullOrEmpty(() => baseKey, baseKey);
this.CodeNamespace = codeNamespace;
this.TestClassDeclaration = testClassDeclaration;
this.TypeMember = typeMember;
this.BuildData = buildData;
this.SetUpTearDownContext = setUpTearDownContext;
this.PreBuildResult = new MemberBuildResult();
this.BuildResult = new MemberBuildResult();
//this.TestKey = GetTestKey(codeNamespace, testClassDeclaration, typeMember);
var fixer = new KeynameFixer(codeNamespace, testClassDeclaration, typeMember);
var fixedName = fixer.Fix(typeMember.Name);
this.TestKey = baseKey + "." + fixedName;
}