Sina-Soltani / Parbad

A free, open-source, integrated and extensible library which connects your web applications to online payment gateways. Gateways can be added or developed by you.
GNU Lesser General Public License v3.0
364 stars 81 forks source link

دریافت خطای Object reference not set to an instance of an object #290

Closed drspam1991 closed 2 years ago

drspam1991 commented 2 years ago

سلام من در .NetCore در unit test برای initialize از این کد استفاده کردم:

` var builder = ParbadBuilder.CreateDefaultBuilder() .ConfigureGateways(gateways => { gateways .AddParbadVirtual() .WithOptions(options => options.GatewayPath = "/MyVirtualGateway"); }) .ConfigureHttpContext(builder => builder.UseDefaultAspNetCore()) .ConfigureStorage(builder => builder.UseMemoryCache());

builder.Build(); `

و در ادامه از StaticOnlinePayment.Instance استفاده کردم و با صدا زدن متد RequestAsync پیغام Object reference not set to an instance of an object را دریافت میکنم. مشکل از کجا میتونه باشه؟ ممنون

Sina-Soltani commented 2 years ago

درود خطایی که دریافت می کنید به احتمال زیاد به خاطر عدم وجود IHttpContextAccessor هست علت اینه که شما دارید برای ابزاری تست مینویسید که نیاز به یک محیط اجرایی داره. هدف شما از نوشتن این تست دقیقا چه چیزی هست؟ چون معمولا تست‌ها رو برای تست کردن کدهای خودتون باید بنویسید نه برای تست کردن ابزاری که دانلود یا نصب کردید.

drspam1991 commented 2 years ago

ممنون بابت پاسختون. قصد من این هست که فرایندهای داخلی خودم رو بعد از request به بانک و همینطور Verify تست کنم. میخواستم از VirtualGateway استفاده کنم که نخوام اونهارو Mock کنم

Sina-Soltani commented 2 years ago

راهی به جز Mock وجود نداره. روش صحیح نوشتن تست برای عملیاتی که در اون از یک ابزار خارجی استفاده میشه، استفاده از Mock هست. شما باید اینترفیس IOnlinePayment رو با Mock شبیه سازی کنید و برای این کار کافیه یک خروجی متناسب با چیزی که در تست انتظار دارید رو برای متدهای RequestAsnc و VerfyAsync تولید کنید.

drspam1991 commented 2 years ago

بله درسته. ممنون از شما