Ich versuche Unit-Tests für meinen Linq To SQL-Code einzurichten. Mein Code verwendet die Klasse System.Data.Linq.Table (vom Designer generiert).Ist Typemock das einzige Framework, das eine Linq To SQL-Tabellenklasse vortäuschen kann?
Da diese Klasse versiegelt ist und der Konstruktor intern ist, ist sie vollständig impervious to unit testing frameworks like Rhino Mocks. (Es sei denn, Sie möchten Ihren Code ändern, um das Repository-Muster zu verwenden, was ich lieber nicht möchte.)
Typemock kann (wie auch immer) diese Klasse vortäuschen. (Siehe here für ein Beispiel.)
Typemock ist jedoch auch $ 800 eine Lizenz. Ich sehe nicht, dass mein Arbeitgeber in absehbarer Zeit dazu aufbricht.
Also hier ist die Frage. Gibt es noch andere spöttische Frameworks, die nicht auf Interfaces angewiesen sind, um die Mocks zu erstellen?
Edit: Beispiel für Code, den ich zu Test benötigen:
public class UserDAL : IUserDAL
{
private IDataClassesDataContext _ctx;
public UserDAL()
{
string env = ConfigurationManager.AppSettings["Environment"];
string connectionString = ConfigurationManager
.ConnectionStrings[env].ConnectionString;
_ctx = new DataClassesDataContext(connectionString);
}
public UserDAL(IDataClassesDataContext context)
{
_ctx = context;
}
public List<User> GetUsersByOrganization(int organizationId)
{
IOrderedQueryable<User> vUsers =
(from myUsers in _ctx.Users
where myUsers.Organization == organizationId
orderby myUsers.LastName
select myUsers);
return vUsers.ToList();
}
public bool IsUserInOrganization(User user, int orgainzationID)
{
// Do some Dal Related logic here.
return GetUsersByOrganization(orgainzationID).Contains(user);
}
}
Ich habe dies zu erleichtern, verkürzt sich die lesen. Die Idee ist, dass ich einige Code haben (wie IsUserInOrganization
, die eine andere Methode aufruft (wie GetUsersByOrganization
), die eine Linq Abfrage der Fall ist.
möchte ich Unit-Test die IsUserInOrganization
Methode mögen. Sie tun, dass ich _ctx.Users verspotten müssten ., die eine Tabellenklasse wird (das ist versiegelt und verfügt über einen internen Konstruktor)
Zwei Hinweise dazu Code: 1. Prüfung IsUserInOrganization in der Regel getrennt sein sollte von der Prüfung GetUsersByOrganization außer in Test Integration; sie machen nicht dasselbe. Tests von GetUsersByOrganization enthalten normalerweise die Abdeckung der spezifischen Verwendung in IsUserInOrganization. Ohne zusätzlichen Code in der IsUserInOrganization-Methode gibt es keinen Grund, die Methode zu testen, da GetUsersByOrganization die relevanten Fälle ohnehin testen sollte. Grundsätzlich, in diesem Fall wollen Sie meiner Meinung nach das falsche Ding testen. –
Man ruft das andere an. Wie kann man es ausprobieren, ohne es auf eine andere Klasse zu übertragen? – Vaccano
Sie können nicht. Das ist in der Tat ein Code-Geruch. –