यह ऐसा कुछ करने का मेरा पहला प्रयास है, इसलिए उम्मीद है कि यह आसान है।यूनिटफवर्क पैटर्न का उपयोग कर राइनो मॉक एंटिटी फ्रेमवर्क
मैंने एक डब्ल्यूसीएफ सेवा बनाई है जो डेटाबेस तक पहुंचने के लिए इकाई फ्रेमवर्क का उपयोग करती है। मैंने यूनिटऑफवर्क इंटरफ़ेस लागू किया है, इसलिए मेरी सेवा अभी भी परीक्षण योग्य होने पर ईएफ का उपयोग कर सकती है। मैं का एक SQLUnitOfWork
(एफई का प्रयोग करके) या एक InMemoryUnitOfWork
के साथ या तो ठोस कार्यान्वयन (के साथ इस सेवा का उपयोग करते हैं
public interface IUnitOfWork
{
IObjectSet<tblClient> Clients { get; }
IObjectSet<tblServer> Servers { get; }
IObjectSet<tblSite> Sites { get; }
IObjectSet<tblServerLog> ServerLogs { get; }
void Commit();
}
:
public class ProjectService : IProjectService
{
private IUnitOfWork db = null;
public ProjectService(IUnitOfWork unitofwork)
{
db = unitofwork;
}
public int RegisterSite(int CPUID)
{
if (db.Servers.Count(x => x.CPUID == CPUID) > 0)
{
// do something
}
return 0;
}
}
यहाँ मेरी UnitOfWork इंटरफेस है:
यहाँ मेरी सेवा है बस स्मृति वस्तुओं में) तो यह ठीक काम करता है।
मेमोरी ऑब्जेक्ट्स में ठीक से परीक्षण करने के बाद मैंने इस परीक्षण की कोशिश की।
[Test]
public void RegisterAnExistingServer()
{
MockRepository mocks = new MockRepository();
IUnitOfWork MockUnitOfWork = mocks.DynamicMock<IUnitOfWork>();
ProjectService service = new ProjectService(MockUnitOfWork);
Expect.Call(MockUnitOfWork.Servers.Count(x => x.CPUID == 1234)).Return(0);
mocks.ReplayAll();
int NewSiteID = service.RegisterSite(1234);
mocks.VerifyAll();
}
लेकिन जब मैं इसे का उपयोग राइनो नकली में एक उम्मीद के साथ Servers.Count पर मैं निम्न त्रुटि हो प्रयास करें:
System.ArgumentNullException : Value cannot be null.
Parameter name: arguments
at System.Linq.Expressions.Expression.RequiresCanRead(Expression expression, String paramName)
at System.Linq.Expressions.Expression.ValidateOneArgument(MethodBase method, ExpressionType nodeKind, Expression arg, ParameterInfo pi)
at System.Linq.Expressions.Expression.ValidateArgumentTypes(MethodBase method, ExpressionType nodeKind, ref ReadOnlyCollection`1 arguments)
at System.Linq.Expressions.Expression.Call(Expression instance, MethodInfo method, IEnumerable`1 arguments)
at System.Linq.Queryable.Count(IQueryable`1 source, Expression`1 predicate)
क्या मैं गलत कर रहा हूँ ??
शायद त्रुटि यह है कि 'सर्वर' शून्य है। मुझे लगता है कि आपको इसे भी सेट करना होगा। 'और अब भी वही त्रुटि; –
तो मैं इस लाइन ' MockUnitOfWork.Servers = mocks.StrictMock>() जोड़ा गया। क्या आपका आशय यही था? –
एक सुझाव, मैं रिकॉर्ड और प्लेबैक सिंटैक्स का उपयोग नहीं करता क्योंकि इसे पसंदीदा व्यवस्था-एक्ट-एस्टर शैली से आगे बढ़ाया गया है। राइनोमोक्स के साथ एपीआई को उसी नामस्थान में होने के कारण उन्हें अलग करना मुश्किल हो सकता है (पिछली बार मैंने चेक किया था)। – aqwert