যেহেতু আপনি লিনক থেকে এসকিএল ব্যবহার করছেন, তাই আপনি নুনিট এবং মোক ব্যবহার করে উল্লিখিত দৃশ্যের পরীক্ষার একটি নমুনা এখানে। আপনার ডেটা কনেক্সটেক্সের সঠিক বিবরণ এবং এটিতে আপনি কী সরবরাহ করেছেন তা আমি জানি না। আপনার প্রয়োজনের জন্য সম্পাদনা করুন।
আপনার একটি কাস্টম ক্লাসের সাথে ডেটা কনটেক্সটটি মোড়ানো প্রয়োজন, আপনি মাক দিয়ে ডেটা কনটেক্সটকে মক করতে পারবেন না। আপনি স্কেলএক্সসেপশনকেও উপহাস করতে পারবেন না, কারণ এটি সিল করে দেওয়া হয়েছে। আপনার নিজের ব্যাতিক্রম শ্রেণীর সাথে এটি মোড়ানো প্রয়োজন। এই দুটি জিনিস অর্জন করা কঠিন নয়।
আসুন আমাদের পরীক্ষা তৈরি করে শুরু করুন:
[Test]
public void FindBy_When_something_goes_wrong_Should_handle_the_CustomSqlException()
{
var mockDataContextWrapper = new Mock<IDataContextWrapper>();
mockDataContextWrapper.Setup(x => x.Table<User>()).Throws<CustomSqlException>();
IUserResository userRespoistory = new UserRepository(mockDataContextWrapper.Object);
User user = userRepository.FindBy(1);
}
আসুন পরীক্ষাটি বাস্তবায়িত করা যাক, প্রথমে আমাদের লিনকটি সিকিউএল কলগুলিতে সংগ্রহস্থল প্যাটার্নটি ব্যবহার করে গুটিয়ে রাখি:
public interface IUserRepository
{
User FindBy(int id);
}
public class UserRepository : IUserRepository
{
public IDataContextWrapper DataContextWrapper { get; protected set; }
public UserRepository(IDataContextWrapper dataContextWrapper)
{
DataContextWrapper = dataContextWrapper;
}
public User FindBy(int id)
{
return DataContextWrapper.Table<User>().SingleOrDefault(u => u.UserID == id);
}
}
এরপরে আইডাটা কনটেক্সট র্যাপারটি তৈরি করুন, আপনি এই বিষয়টিতে এই ব্লগ পোস্টটি দেখতে পারেন , আমার খানিকটা আলাদা fers
public interface IDataContextWrapper : IDisposable
{
Table<T> Table<T>() where T : class;
}
পরবর্তী কাস্টমস্কুলএক্সসেপশন শ্রেণি তৈরি করুন:
public class CustomSqlException : Exception
{
public CustomSqlException()
{
}
public CustomSqlException(string message, SqlException innerException) : base(message, innerException)
{
}
}
এখানে IDataContextWrapper এর একটি নমুনা বাস্তবায়ন:
public class DataContextWrapper<T> : IDataContextWrapper where T : DataContext, new()
{
private readonly T _db;
public DataContextWrapper()
{
var t = typeof(T);
_db = (T)Activator.CreateInstance(t);
}
public DataContextWrapper(string connectionString)
{
var t = typeof(T);
_db = (T)Activator.CreateInstance(t, connectionString);
}
public Table<TableName> Table<TableName>() where TableName : class
{
try
{
return (Table<TableName>) _db.GetTable(typeof (TableName));
}
catch (SqlException exception)
{
throw new CustomSqlException("Ooops...", exception);
}
}
}