2016-06-21 14 views
0

Hier ist der Fehler: "Kann Shim für System.Data.SqlClient.SqlDataReaderSmi nicht generieren: Typ ist jetzt für exportierte oder Assembly sichtbar (System.Data.4.0.0.0.Fakes .)Kann Shim für System.Data.SqlClient.SqlDataReaderSmi generieren

Hier ist mein Code:

<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/" Diagnostic="true"> 
    <Assembly Name="System.Data" Version="4.0.0.0"/> 
    <StubGeneration> 
    <Clear/> 
    </StubGeneration> 
    <ShimGeneration> 
    <Clear/> 
    <Remove FullName="System.Data.SqlClient"/> 
    <!--Added Classes--> 
    <Add FullName="System.Data.SqlClient.SqlCommand!"/> 
    <Add FullName="System.Data.SqlClient.SqlConnection!"/> 
    <Add FullName="System.Data.SqlClient.SqlDataRead"/> 
    </ShimGeneration> 
</Fakes> 

in meiner Unit-Tests ich die SqlDataReader wie so bin spöttisch:

var statReqReader = new ShimSqlDataReader() 
     { 
      Read =() => 
      { 
       if (dsrIndexCounter < testCaseCount) 
       { 
        dsrIndexCounter++; 
        return true; 
       } 
       return false; 
      }, 
      ItemGetString = (val) => 
      { 
       // [] operator 
       return dtStatReq.Rows[dsrIndexCounter - 1][val]; 
      } 
     }; 

im allgemeinen muss ich Fakes in meiner Unit-Tests verwenden, . Wenn ich versuche, die folgende Zeile über die SqlDataReader in der Fakes zu entfernen Datei

<Add FullName="System.Data.SqlClient.SqlDataRead"/> 

ich die folgende Fehlermeldung gegeben habe:

„Der Typ oder Namespace-Name‚ShimSqlDataReader‘konnte nicht gefunden werden (sind eine using-Direktive oder ein Assemblyverweis fehlt?)

ich die SqlDataReader verspotten und müssen Fakes verwenden. Was mache ich falsch?

+0

Warum? Sie haben bereits eine Schnittstelle und eine abstrakte Basisklasse, die Sie verwenden können. –

+0

Was ist ein "SqlDataReaderSmi"? –

+0

@ JonathanAllen Ich habe die Frage aktualisiert, um ins Detail zu gehen. – MStrad

Antwort

0

dachte ich, mein Problem aus. Hier ist, was den Fehler entfernt.

1.Ich habe eine Beispiel-Mock-Funktion hinzugefügt, um die Shim-Klasse von SqlDataReader zu sehen. Als ich es gefunden hatte, wurde mir klar, dass ich den Namen in der Fakes-Datei spezifisch genug geschrieben hatte.

2. Ersetzen der endgültigen hinzufügen mit der folgenden Zeile des Codes behoben das Problem.

<Add FullName="System.Data.SqlClient.SqlDataReader!"/>