ডাটাবেস ক্যোয়ারী সহ কোনও বস্তুকে কীভাবে পরীক্ষা করা যায়


153

আমি শুনেছি যে ইউনিট টেস্টিং "সম্পূর্ণ দুর্দান্ত", "সত্যিই দুর্দান্ত" এবং "সমস্ত ধরণের ভাল জিনিস" তবে আমার 70০% বা তার বেশি ফাইল ডেটাবেস অ্যাক্সেসের সাথে জড়িত (কিছু পড়তে এবং কিছু লিখতে পারে) এবং আমি নিশ্চিত না যে কীভাবে এই ফাইলগুলির জন্য একটি ইউনিট পরীক্ষা লিখতে।

আমি পিএইচপি এবং পাইথন ব্যবহার করছি তবে আমার মনে হয় এটি এমন একটি প্রশ্ন যা ডাটাবেস অ্যাক্সেস ব্যবহার করে এমন বেশিরভাগ / সমস্ত ভাষার ক্ষেত্রে প্রযোজ্য।

উত্তর:


82

আমি ডাটাবেসে আপনার কলগুলি উপহাস করার পরামর্শ দেব। মকগুলি মূলত এমন বস্তু যা আপনি যে পদ্ধতিতে কল করার চেষ্টা করছেন সেই বস্তুর মতো দেখতে এই অর্থে যে কলারের কাছে তাদের একই বৈশিষ্ট্য, পদ্ধতি ইত্যাদি রয়েছে। তবে যখন কোনও নির্দিষ্ট পদ্ধতি বলা হয় তখন তারা যা করার জন্য প্রোগ্রাম করা হয় সেগুলি সম্পাদন করার পরিবর্তে এটি পুরোপুরি এড়িয়ে যায় এবং কেবল ফলাফল দেয়। ফলাফলটি সাধারণত আপনার আগে সংজ্ঞায়িত হয়।

বিদ্রূপের জন্য আপনার অবজেক্টগুলি সেট আপ করার জন্য, আপনাকে সম্ভবত নিম্নলিখিত সিউডো কোডের মতো নিয়ন্ত্রণ / নির্ভরতা ইনজেকশন প্যাটার্নের কিছু ধরণের বিপরীত ব্যবহার করতে হবে:

class Bar
{
    private FooDataProvider _dataProvider;

    public instantiate(FooDataProvider dataProvider) {
        _dataProvider = dataProvider;
    }

    public getAllFoos() {
        // instead of calling Foo.GetAll() here, we are introducing an extra layer of abstraction
        return _dataProvider.GetAllFoos();
    }
}

class FooDataProvider
{
    public Foo[] GetAllFoos() {
        return Foo.GetAll();
    }
}

এখন আপনার ইউনিট পরীক্ষায়, আপনি FooDataProvider এর একটি উপহাস তৈরি করেন, যা আপনাকে ডাটাবেসটিকে হিট না করেই getAllFoos পদ্ধতিটি কল করতে দেয়।

class BarTests
{
    public TestGetAllFoos() {
        // here we set up our mock FooDataProvider
        mockRepository = MockingFramework.new()
        mockFooDataProvider = mockRepository.CreateMockOfType(FooDataProvider);

        // create a new array of Foo objects
        testFooArray = new Foo[] {Foo.new(), Foo.new(), Foo.new()}

        // the next statement will cause testFooArray to be returned every time we call FooDAtaProvider.GetAllFoos,
        // instead of calling to the database and returning whatever is in there
        // ExpectCallTo and Returns are methods provided by our imaginary mocking framework
        ExpectCallTo(mockFooDataProvider.GetAllFoos).Returns(testFooArray)

        // now begins our actual unit test
        testBar = new Bar(mockFooDataProvider)
        baz = testBar.GetAllFoos()

        // baz should now equal the testFooArray object we created earlier
        Assert.AreEqual(3, baz.length)
    }
}

সংক্ষেপে একটি সাধারণ বিদ্রূপের দৃশ্য। অবশ্যই আপনি সম্ভবত আপনার প্রকৃত ডাটাবেস কলগুলিও পরীক্ষা করতে চাইবেন, যার জন্য আপনাকে ডাটাবেসটি আঘাত করতে হবে।


আমি জানি এটি পুরানো তবে ডিবিতে থাকা একটিতে সদৃশ টেবিল তৈরির বিষয়ে about এইভাবে আপনি ডিবি কলগুলি কাজ নিশ্চিত করতে পারবেন?
শিষ্টাচারক

1
আমি পিএইচপি'র পিডিওকে আমার সর্বনিম্ন স্তরের ডেটাবেস অ্যাক্সেস হিসাবে ব্যবহার করেছি, যার উপরে আমি একটি ইন্টারফেস বের করেছি। তারপরে আমি তার উপরে একটি অ্যাপ্লিকেশন সচেতন ডাটাবেস স্তর তৈরি করেছি। এটি এমন স্তর যা সমস্ত কাঁচা এসকিউএল কোয়েরি এবং অন্যান্য তথ্য ধারণ করে। অ্যাপ্লিকেশনটির বাকি অংশগুলি এই উচ্চ-স্তরের ডাটাবেসের সাথে ইন্টারঅ্যাক্ট করে। আমি ইউনিট পরীক্ষার জন্য এটি বেশ ভাল কাজ খুঁজে পেয়েছি; আমি আমার অ্যাপ্লিকেশন পৃষ্ঠাগুলি পরীক্ষা করে দেখি যে তারা কীভাবে অ্যাপ্লিকেশন ডাটাবেসের সাথে ইন্টারঅ্যাক্ট করে। আমি আমার অ্যাপ্লিকেশন ডাটাবেসটি পিডিওর সাথে কীভাবে ইন্টারঅ্যাক্ট করে তা পরীক্ষা করি। আমি ধরে নিচ্ছি পিডিও কোনও বাগ ছাড়াই কাজ করে। উত্স কোড: manx.codeplex.com
বৈধকরণ করুন

1
@ ব্রেটারার - একত্রীকরণের পরীক্ষার জন্য সদৃশ টেবিল তৈরি করা ভাল। ইউনিট পরীক্ষার জন্য আপনি সাধারণত একটি মক অবজেক্ট ব্যবহার করেন যা আপনাকে ডাটাবেস নির্বিশেষে কোডের একক পরীক্ষার অনুমতি দেবে।
বার্নটোকোড

2
আপনার ইউনিট পরীক্ষায় ডেটাবেস কল উপহাস করার মূল্য কী? এটি কার্যকর বলে মনে হচ্ছে না কারণ আপনি কোনও ভিন্ন ফলাফল প্রত্যাবর্তনের জন্য বাস্তবায়ন পরিবর্তন করতে পারেন তবে আপনার ইউনিট পরীক্ষাটি (ভুলভাবে) পাস করবে।
bmay2

2
@ bmay2 আপনি ভুল নন আমার আসল উত্তরটি দীর্ঘ সময় আগে লেখা হয়েছিল (9 বছর!) যখন প্রচুর লোক পরীক্ষাযোগ্য পদ্ধতিতে তাদের কোড লিখছিল না এবং যখন পরীক্ষার সরঞ্জামগুলির তীব্র অভাব ছিল। আমি এই পদ্ধতির আর সুপারিশ করব না। আজ আমি কেবল একটি পরীক্ষামূলক ডাটাবেস সেট আপ করব এবং এটি পরীক্ষার জন্য প্রয়োজনীয় ডেটা দিয়ে পপুলেশন করব এবং / অথবা আমার কোড ডিজাইন করব যাতে আমি কোনও ডাটাবেস ছাড়াই যথাসম্ভব যুক্তি পরীক্ষা করতে পারি।
ডগ আর

25

আদর্শভাবে, আপনার অবজেক্টগুলি অবিচ্ছিন্ন হওয়া উচিত। উদাহরণস্বরূপ, আপনার কাছে একটি "ডেটা অ্যাক্সেস স্তর" থাকা উচিত, যা আপনি অনুরোধ করবেন, যাতে বস্তুগুলি ফিরে আসবে। এইভাবে, আপনি সেই অংশটি আপনার ইউনিট পরীক্ষার বাইরে রেখে দিতে পারেন, বা তাদের বিচ্ছিন্নভাবে পরীক্ষা করতে পারেন।

যদি আপনার অবজেক্টগুলি আপনার ডেটা স্তরে শক্তভাবে মিলিত হয় তবে সঠিক ইউনিট পরীক্ষা করা কঠিন difficult ইউনিট পরীক্ষার প্রথম অংশটি হ'ল "ইউনিট"। সমস্ত ইউনিট বিচ্ছিন্নভাবে পরীক্ষা করতে সক্ষম হওয়া উচিত।

আমার সি # প্রকল্পগুলিতে, আমি সম্পূর্ণ পৃথক ডেটা স্তর সহ এনএইচবারনেট ব্যবহার করি। আমার অবজেক্টগুলি মূল ডোমেন মডেলটিতে বাস করে এবং আমার অ্যাপ্লিকেশন স্তর থেকে অ্যাক্সেস করা হয়। অ্যাপ্লিকেশন স্তরটি ডেটা স্তর এবং ডোমেন মডেল স্তর উভয়ের সাথে কথা বলে।

অ্যাপ্লিকেশন স্তরটিকে কখনও কখনও "ব্যবসায় স্তর "ও বলা হয়।

আপনি যদি পিএইচপি ব্যবহার করছেন তবে কেবলমাত্র ডেটা অ্যাক্সেসের জন্য ক্লাসের একটি নির্দিষ্ট সেট তৈরি করুন । নিশ্চিত করুন যে আপনার পদার্থগুলি কীভাবে অবিচল রয়েছে সে সম্পর্কে কোনও ধারণা নেই এবং আপনার অ্যাপ্লিকেশন ক্লাসে দুটোকে তারে যুক্ত করে।

অন্য বিকল্প হ'ল মকিং / স্টাব ব্যবহার করা।


আমি সর্বদা এটির সাথে একমত হয়েছি তবে সময়সীমা এবং "ঠিক আছে, এখন মাত্র দুপুর ২ টার মধ্যে আরও একটি বৈশিষ্ট্য যুক্ত করুন" এর কারণে অনুশীলনে এটি অর্জন করা সবচেয়ে কঠিন একটি বিষয়। এই ধরণের জিনিসটি রিফ্যাক্টরিংয়ের একটি প্রধান লক্ষ্য, যদিও, যদি আমার বস কখনও সিদ্ধান্ত নেন যে তিনি 50 টি নতুন উদ্ভূত সমস্যার কথা ভাবেন নি, যা সর্বদাই নতুন ব্যবসার যুক্তি এবং টেবিলগুলির প্রয়োজন।
ড্যারেন রিঞ্জার

3
যদি আপনার অবজেক্টগুলি আপনার ডেটা স্তরে শক্তভাবে মিলিত হয় তবে সঠিক ইউনিট পরীক্ষা করা কঠিন difficult ইউনিট পরীক্ষার প্রথম অংশটি হ'ল "ইউনিট"। সমস্ত ইউনিট বিচ্ছিন্নভাবে পরীক্ষা করতে সক্ষম হওয়া উচিত। সুন্দর ব্যাখ্যা
অমিতাভ

11

ডাটাবেস অ্যাক্সেস সহ কোনও সামগ্রীর এক্ট করার সহজতম উপায় হ'ল লেনদেনের স্কোপগুলি ব্যবহার করা।

উদাহরণ স্বরূপ:

    [Test]
    [ExpectedException(typeof(NotFoundException))]
    public void DeleteAttendee() {

        using(TransactionScope scope = new TransactionScope()) {
            Attendee anAttendee = Attendee.Get(3);
            anAttendee.Delete();
            anAttendee.Save();

            //Try reloading. Instance should have been deleted.
            Attendee deletedAttendee = Attendee.Get(3);
        }
    }

এটি মূলত একটি লেনদেন রোলব্যাকের মতো ডাটাবেসের স্থিতি ফিরিয়ে আনবে যাতে আপনি কোনও পার্শ্ব প্রতিক্রিয়া ছাড়াই আপনি যতবার চান পরীক্ষা চালাতে পারেন। আমরা এই প্রকল্পটি বড় প্রকল্পগুলিতে সফলভাবে ব্যবহার করেছি। আমাদের বিল্ডটি চালাতে কিছুটা সময় নেয় (15 মিনিট), তবে 1800 ইউনিট পরীক্ষা করানো এটি ভয়াবহ নয়। এছাড়াও, যদি বিল্ড সময়টি উদ্বেগজনক হয় তবে আপনি বিল্ড প্রক্রিয়াটিকে একাধিক বিল্ডে রূপান্তর করতে পারবেন, একটিতে এসআরসি তৈরির জন্য, অন্যটি যা পরে ইউনিট পরীক্ষা, কোড বিশ্লেষণ, প্যাকেজিং ইত্যাদি পরিচালনা করে ...


1
ইউনিট ডেটা অ্যাক্সেস স্তরগুলির পরীক্ষার সময় +1 অনেক সময় সাশ্রয় করে। কেবলমাত্র নোট করুন যে টিএস এর প্রায়শই এমএসডিটিসি প্রয়োজন যা কাঙ্ক্ষিত নাও হতে পারে (আপনার অ্যাপ্লিকেশনটির এমএসডিটিসি লাগবে কিনা তার উপর নির্ভর করে)
স্টুয়ার্টএলসি ২

মূল প্রশ্নটি পিএইচপি সম্পর্কে ছিল, এই উদাহরণটি সি # বলে মনে হচ্ছে। পরিবেশগুলি খুব আলাদা।
বৈধকরণ

2
প্রশ্নের লেখক জানিয়েছেন যে এটি একটি সাধারণ প্রশ্ন যা সমস্ত ভাষার ক্ষেত্রে প্রয়োগ হয় যার একটি ডিবিতে কিছু সম্পর্ক রয়েছে।
বেদরান

9
এবং এই প্রিয় বন্ধুদের, বলা হয় সংহতকরণ পরীক্ষা
এএ।

10

আমি সম্ভবত আমাদের অভিজ্ঞতার স্বাদ দিতে পারি যখন আমরা আমাদের মাঝারি স্তরের প্রক্রিয়াটির পরীক্ষা করতে শুরু করি যাতে এতে একটি টন "বিজনেস লজিক" স্কিল অপারেশন অন্তর্ভুক্ত রয়েছে।

আমরা প্রথমে একটি বিমূর্ততা স্তর তৈরি করেছি যা আমাদেরকে কোনও যুক্তিসঙ্গত ডাটাবেস সংযোগ "স্লট" করতে দেয় (আমাদের ক্ষেত্রে আমরা কেবল একটি একক ওডিবিসি-টাইপ সংযোগকে সমর্থন করি)।

এটি একবার হয়ে গেলে, আমরা তখন আমাদের কোডে এই জাতীয় কিছু করতে সক্ষম হয়েছি (আমরা সি ++ এ কাজ করি তবে আমি নিশ্চিত আপনি ধারণাটি পেয়ে গেছেন):

গেটডাটাবেস ()। এক্সিকিউট এসকিউএল ("অন্তর্ভুক্তি ফু (ব্লা, ব্লাহ)")

স্বাভাবিক রান সময়, গেটডাটাবেস () এমন কোনও বস্তু ফিরিয়ে দেয় যা আমাদের সমস্ত স্ক্যুয়েল (ক্যোয়ারী সহ) সরবরাহ করে, ওডিবিসি-এর মাধ্যমে সরাসরি ডাটাবেসে।

এরপরে আমরা ইন-মেমরি ডেটাবেসগুলি সন্ধান করতে শুরু করি - দীর্ঘ পথের মধ্যে সেরা এসকিউএলাইট বলে মনে হয়। ( http://www.sqlite.org/index.html )। এটি সেট আপ এবং ব্যবহার করা লক্ষণীয়ভাবে সহজ, এবং আমাদের সাবক্লাস এবং গেটডাটাবেস () কে স্ক্রোলটি ইন-মেমরি ডাটাবেসে ফরোয়ার্ড করার অনুমতি দেয় যা প্রতিটি পরীক্ষার জন্য তৈরি এবং ধ্বংস করা হয়েছিল।

আমরা এখনও এটির প্রাথমিক পর্যায়ে রয়েছি, তবে এটি এখন পর্যন্ত ভাল দেখাচ্ছে, তবে আমাদের অবশ্যই প্রয়োজনীয় যে কোনও সারণী তৈরি করতে হবে এবং পরীক্ষার ডেটা দিয়ে এগুলি স্থাপন করতে হবে - তবে আমরা এখানে তৈরি করে কাজের চাপ কিছুটা হ্রাস করেছি সহায়ক ফাংশনগুলির একটি জেনেরিক সেট যা আমাদের জন্য এই সমস্ত কিছু করতে পারে।

সামগ্রিকভাবে, এটি আমাদের টিডিডি প্রক্রিয়াতে প্রচুর পরিমাণে সহায়তা করেছে, যেহেতু নির্দিষ্ট বাগগুলি সংশোধন করার জন্য বেশ নিরীহ পরিবর্তনের মতো বলে মনে করা আপনার সিস্টেমে অন্যান্য (সনাক্তকরণে অসুবিধাজনক) ক্ষেত্রগুলিতে বেশ বিস্ময়কর প্রভাব ফেলতে পারে - স্কেল / ডাটাবেসগুলির প্রকৃতির কারণে।

স্পষ্টতই, আমাদের অভিজ্ঞতাগুলি একটি সি ++ বিকাশের পরিবেশকে কেন্দ্র করে হয়েছে তবে আমি নিশ্চিত যে আপনি সম্ভবত পিএইচপি / পাইথনের অধীনে অনুরূপ কিছু কাজ করতে পারবেন।

আশাকরি এটা সাহায্য করবে.


9

আপনি যদি আপনার ক্লাসগুলি পরীক্ষা করতে চান তবে আপনার ডাটাবেস অ্যাক্সেসকে উপহাস করা উচিত। সর্বোপরি, আপনি একক পরীক্ষায় ডাটাবেসটি পরীক্ষা করতে চান না। এটি একটি সংহতকরণ পরীক্ষা হবে।

কলগুলি দূরে রেখে তারপরে একটি মক সন্নিবেশ করান যা কেবলমাত্র প্রত্যাশিত ডেটা দেয়। যদি আপনার ক্লাসগুলি কোয়েরিগুলি সম্পাদন করার চেয়ে আরও বেশি কিছু না করে, তবে এটিগুলি পরীক্ষা করার মতোও নাও হতে পারে, যদিও ...


6

XUnit টেস্ট প্যাটার্নস বইটি ইউনিট-টেস্টিং কোড হ্যান্ডেল করার কয়েকটি উপায় বর্ণনা করে যা একটি ডাটাবেসকে হিট করে। আমি অন্য লোকেদের সাথে একমত যাঁরা বলছেন যে আপনি এটি করতে চান না কারণ এটি ধীর গতিযুক্ত, তবে আপনি কিছুদিন এটি করতে হবে, আইএমও। উচ্চ স্তরের স্টাফগুলি পরীক্ষা করার জন্য ডিবি সংযোগটি বিদ্রূপ করা ভাল ধারণা, তবে আসল ডাটাবেসের সাথে ইন্টারেক্ট করার জন্য আপনি যে জিনিসগুলি করতে পারেন সে সম্পর্কে পরামর্শের জন্য এই বইটি দেখুন।


4

আপনার কাছে বিকল্পগুলি:

  • আপনি ইউনিট পরীক্ষা শুরু করার আগে একটি স্ক্রিপ্ট লিখুন যা ডেটাবেস মুছে ফেলবে, তারপরে ডেবিদের পূর্বনির্ধারিত সেটের সাহায্যে বিশিষ্ট করবে এবং পরীক্ষাগুলি চালাবে। আপনি প্রতিটি পরীক্ষার আগে এটিও করতে পারেন - এটি ধীর হবে তবে ত্রুটির প্রবণতা কম।
  • ডাটাবেস ইনজেক্ট করুন। (সিউডো-জাভার উদাহরণ, তবে সমস্ত ওও-ভাষার ক্ষেত্রে প্রযোজ্য)

    ক্লাস ডাটাবেস {
     সর্বজনীন ফলাফল কোয়েরি (স্ট্রিং ক্যোয়ারী) {... এখানে আসল ডিবি ...}
    }

    ক্লাস মকডাটাবেস ডাটাবেস প্রসারিত করে { সর্বজনীন ফলাফল কোয়েরি (স্ট্রিং ক্যোয়ারী) { "মক ফলাফল" প্রত্যাবর্তন; } }

    ক্লাস অবজেক্টট্যাটসেসবিবি { পাবলিক অবজেক্টট্যাটসেসবিবি (ডাটাবেস ডিবি) { this.database = db; } }

    এখন উত্পাদনে আপনি সাধারণ ডাটাবেস ব্যবহার করেন এবং সমস্ত পরীক্ষার জন্য আপনি কেবল মক ডাটাবেসটি ইনজেক্ট করেন যা আপনি অ্যাডহক তৈরি করতে পারেন।

  • বেশিরভাগ কোড জুড়েই ডিবি ব্যবহার করবেন না (এটি যাইহোক খারাপ অভ্যাস)। একটি "ডাটাবেস" অবজেক্ট তৈরি করুন যে ফলাফলের সাথে ফিরে আসার পরিবর্তে স্বাভাবিক বস্তুগুলি ফিরে আসবে (যেমন Userএকটি টিপলের পরিবর্তে ফিরে আসবে {name: "marcin", password: "blah"}) আপনার সমস্ত পরীক্ষাগুলি অ্যাডহক নির্মিত রিয়েল অবজেক্টের সাথে লিখুন এবং একটি বড় পরীক্ষা লিখুন যা কোনও ডাটাবেসের উপর নির্ভর করে যা এই রূপান্তরটি নিশ্চিত করে তোলে ঠিক আছে কাজ করে।

অবশ্যই এই পদ্ধতিগুলি পারস্পরিক একচেটিয়া নয় এবং আপনি যেমন প্রয়োজন তেমন মিশ্রন করতে পারেন match


3

আপনার প্রকল্পে উচ্চ সংহতি এবং আলগা সংযোগ থাকলে আপনার ডাটাবেস অ্যাক্সেসের ইউনিট পরীক্ষা করা যথেষ্ট সহজ। এই পদ্ধতিতে আপনি একবারে সমস্ত কিছু পরীক্ষা না করে প্রতিটি শ্রেণি দ্বারা কেবল কেবল সেগুলি পরীক্ষা করতে পারেন।

উদাহরণস্বরূপ, আপনি যদি নিজের ইউজার ইন্টারফেস শ্রেণীর পরীক্ষা করে থাকেন তবে আপনি যে পরীক্ষাগুলি লিখেন সেগুলি কেবলমাত্র ইউআই-এর অভ্যন্তরে যুক্তিটি প্রত্যাশিত হিসাবে যাচাই করার চেষ্টা করা উচিত, সেই ফাংশনের পিছনে ব্যবসায়িক যুক্তি বা ডাটাবেস ক্রিয়াকলাপ নয়।

আপনি যদি সত্যিকারের ডাটাবেস অ্যাক্সেসটি পরীক্ষা করতে চান তবে আপনি বাস্তবে আরও একটি ইন্টিগ্রেশন পরীক্ষার সমাপ্তি ঘটবেন, কারণ আপনি নেটওয়ার্ক স্ট্যাক এবং আপনার ডাটাবেস সার্ভারের উপর নির্ভরশীল থাকবেন তবে আপনি যাচাই করতে পারবেন যে আপনার এসকিউএল কোড যা বলেছিল তা করে না।

ব্যক্তিগতভাবে আমার জন্য ইউনিট টেস্টিংয়ের গোপন শক্তিটি এটি ছিল যে এটি আমার অ্যাপ্লিকেশনগুলি আমি না ছাড়াই আরও বেশি ভাল উপায়ে ডিজাইন করতে বাধ্য করে। এটি কারণ এটি সত্যই আমাকে "এই ফাংশনটি সব কিছু করা উচিত" মানসিকতা থেকে বিরত থাকতে সাহায্য করেছিল।

দুঃখিত, পিএইচপি / পাইথনের জন্য আমার কাছে কোনও নির্দিষ্ট কোড উদাহরণ নেই, তবে আপনি যদি .NET উদাহরণ দেখতে চান তবে আমার কাছে একটি পোস্ট রয়েছে যা একটি কৌশল বর্ণনা করে যা আমি এটি খুব একই পরীক্ষায় করতাম।


2

আমি সাধারণত বস্তুর পরীক্ষা (এবং ওআরএম, যদি থাকে) এবং ডিবি পরীক্ষার মধ্যে আমার পরীক্ষাগুলি ভেঙে ফেলার চেষ্টা করি। আমি ডেটা অ্যাক্সেস কলগুলিকে উপহাস করে জিনিসগুলির বস্তুগত দিকটি পরীক্ষা করি যেখানে আমি আমার অভিজ্ঞতায় সাধারণত বেশ সীমাবদ্ধ এমন ডিবি দিয়ে বস্তুর ইন্টারঅ্যাকশন পরীক্ষা করে জিনিসগুলির ডিবি পাশ পরীক্ষা করি।

আমি ডেটা অ্যাক্সেস অংশটি উপহাস করা শুরু না করা অবধি ইউনিট টেস্টগুলি রচনায় হতাশ হয়ে পড়ি যাতে আমাকে ফ্লাইতে কোনও পরীক্ষার ডিবি তৈরি করতে বা পরীক্ষার ডেটা তৈরি করতে না হয়। ডেটাটিকে উপহাস করে আপনি চালানোর সময় এগুলি উত্পন্ন করতে পারবেন এবং নিশ্চিত হয়ে নিন যে আপনার অবজেক্টগুলি জ্ঞাত ইনপুটগুলির সাথে সঠিকভাবে কাজ করে।


2

আমি পিএইচপি-তে এটি কখনও করি নি এবং আমি পাইথনটি কখনও ব্যবহার করি নি, তবে আপনি যা করতে চান তা হ'ল ডেটাবেসগুলিতে কল করা। এটি করার জন্য আপনি কিছু আইওসি বাস্তবায়ন করতে পারেন তৃতীয় পক্ষের সরঞ্জামটি আপনি নিজে পরিচালনা করেন বা না করে আপনি ডাটাবেস কলারের কিছু মক সংস্করণটি প্রয়োগ করতে পারেন যেখানে আপনি সেই নকল কলটির ফলাফলটি নিয়ন্ত্রণ করবেন।

IoC এর একটি সাধারণ ফর্মটি কেবল ইন্টারফেসগুলিতে কোড করেই সম্পাদন করা যেতে পারে। এটির জন্য আপনার কোডে একরকম অবজেক্ট ওরিয়েন্টেশন চলছে তাই এটি আপনার কাজগুলির ক্ষেত্রে প্রযোজ্য না (আমি বলছি যেহেতু আমাকে যা করতে হবে তা পিএইচপি এবং পাইথনের আপনার উল্লেখ)

আশা করি এটি সহায়ক, অন্য কিছু না হলে এখন অনুসন্ধানের জন্য আপনার কাছে কিছু পদ রয়েছে।


2

আমি প্রথম পোস্টের সাথে একমত - ডাটাবেস অ্যাক্সেসটি ডিএও স্তরতে ছড়িয়ে দেওয়া উচিত যা একটি ইন্টারফেস প্রয়োগ করে। তারপরে, আপনি ডিএও স্তরটির স্টাব বাস্তবায়নের বিরুদ্ধে আপনার যুক্তি পরীক্ষা করতে পারেন।


2

আপনি ডেটাবেস ইঞ্জিন বিমূর্ত করতে মশকরা ফ্রেমওয়ার্ক ব্যবহার করতে পারেন । আমি জানি না পিএইচপি / পাইথন কিছু পেয়েছে তবে টাইপ করা ভাষার জন্য (সি #, জাভা ইত্যাদি) প্রচুর পছন্দ আছে

এটি সেই ডেটাবেস অ্যাক্সেস কোডটি আপনি কীভাবে ডিজাইন করেছিলেন তার উপরও নির্ভর করে, কারণ কিছু পোস্ট নকশাগুলি পূর্ববর্তী পোস্টগুলির মতো অন্যান্য ইউনিট পরীক্ষার চেয়ে সহজ।


2

ইউনিট পরীক্ষার জন্য পরীক্ষার ডেটা সেট আপ করা একটি চ্যালেঞ্জ হতে পারে।

জাভাতে যখন আপনি ইউনিট পরীক্ষার জন্য স্প্রিং এপিআই ব্যবহার করেন, আপনি ইউনিট স্তরে লেনদেনগুলি নিয়ন্ত্রণ করতে পারেন। অন্য কথায়, আপনি ইউনিট পরীক্ষা চালাতে পারেন যা ডেটাবেস আপডেট / সন্নিবেশ / মুছে ফেলা এবং পরিবর্তনগুলি রোলব্যাকের সাথে জড়িত। এক্সিকিউশন শেষে আপনি ডাটাবেসটিতে সবকিছু যেমন রেখেছিলেন ঠিক তেমন কার্যকর করা শুরু করার আগে। আমার কাছে এটি যতটা পেতে পারে তত ভাল।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.