[{"data":1,"prerenderedAt":599},["ShallowReactive",2],{"article-visual-studio-i-need-a-command-prompt-quick-tip":3},{"article":4,"tags":92,"previous":107,"next":384},{"id":5,"title":6,"author":7,"body":8,"createdAt":81,"description":82,"extension":83,"img":27,"meta":84,"navigation":85,"path":86,"seo":87,"stem":88,"tags":89,"updatedAt":81,"__hash__":91},"articles\u002Farticles\u002Fvisual-studio-i-need-a-command-prompt-quick-tip.md","Visual Studio I need a Command Prompt Quick Tip",null,{"type":9,"value":10,"toc":77},"minimark",[11,15,30,43,52,55,66],[12,13,14],"p",{},"Ok, with today's’ development efforts I am in need of a quick way to open a command prompt to the location of the solution. Here is a quick tip on how to enable a keystroke to immediately open one for you (while working within vs.net).  Tools > External Tools “Add”",[12,16,17],{},[18,19,21],"a",{"href":20},"\u002Farticles\u002Fimages\u002Fimage_636774678565575322.png",[22,23],"img",{"title":24,"style":25,"border":26,"alt":24,"src":27,"width":28,"height":29},"image","display: inline; background-image: none;",0,"\u002Farticles\u002Fimages\u002Fimage_thumb_636774678566514389.png",244,242,[12,31,32,33,36,37,39,40,42],{},"Use the following values  Title: VS Command Prompt",[34,35],"br",{},"\nCommand: C:\\Windows\\System32\\cmd.exe",[34,38],{},"\nArguments: \u002Fk “C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\Common7\\Tools\\VsDevCmd.bat”",[34,41],{},"\nInitial Directory: $(SolutionDir) (You can also use $(ProjectDir) to open command prompt in the location of the current project … i like this better)  After you hit OK VS Command Prompt command is available under Tools",[12,44,45],{},[18,46,48],{"href":47},"\u002Farticles\u002Fimages\u002Fimage_636774678569077476.png",[22,49],{"title":24,"style":25,"border":26,"alt":24,"src":50,"width":51,"height":28},"\u002Farticles\u002Fimages\u002Fimage_thumb_636774678569735435.png",140,[12,53,54],{},"Now you can add a Key Stroke command for this…  Tools > Options > Keyboard (here i have added Alt-C). Shown below the only thing to remember is this was my 2nd external tool so I had to look for Tools.ExternalCommand2 to attach my keystroke command.",[12,56,57],{},[18,58,60],{"href":59},"\u002Farticles\u002Fimages\u002FSNAGHTML58a67cb2_636774678570976068.png",[22,61],{"title":62,"style":25,"border":26,"alt":62,"src":63,"width":64,"height":65},"SNAGHTML58a67cb2","\u002Farticles\u002Fimages\u002FSNAGHTML58a67cb2_thumb_636774678571975067.png",400,210,[12,67,68,69,76],{},"Now ",[22,70],{"className":71,"alt":74,"src":75},[72,73],"wlEmoticon","wlEmoticon-smile","Smile","\u002Farticles\u002Fimages\u002FwlEmoticon-smile_636774678572557490.png"," I can click Alt-C and immediately a command prompt window opens to the my solution directory.",{"title":78,"searchDepth":79,"depth":79,"links":80},"",2,[],"2018-11-10T17:30:57.333Z","Need a command prompt fast while working in Visual Studio? Yes is the answer, especially with modern web development efforts.  Often this is to start a command line interface tool, install an npm package, start a web server etc.  This is an old tip but is more relevant today than ever.  Alt-C is the answer...read how.","md",{},true,"\u002Farticles\u002Fvisual-studio-i-need-a-command-prompt-quick-tip",{"title":6,"description":82},"articles\u002Fvisual-studio-i-need-a-command-prompt-quick-tip",[90],"visualstudio","ghOLgPX7maoaDNaCXGN9EJJOfhVA9pCxBkqaMJ6_RJA",[93],{"id":94,"title":95,"body":96,"description":100,"extension":83,"img":101,"meta":102,"name":90,"navigation":85,"path":103,"seo":104,"stem":105,"__hash__":106},"tags\u002Ftags\u002Fvisualstudio.md","Visualstudio",{"type":9,"value":97,"toc":98},[],{"title":78,"searchDepth":79,"depth":79,"links":99},[],"Develop apps for Android, iOS, Mac, Windows, web, and cloud","https:\u002F\u002Fimages.unsplash.com\u002Fphoto-1598313183973-4effcded8d5e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=675&q=80",{},"\u002Ftags\u002Fvisualstudio",{"description":100},"tags\u002Fvisualstudio","glm3bYyBlAXGun4NJe-CV_iOzhszydeBRIpbGNNLeEk",{"id":108,"title":109,"author":7,"body":110,"createdAt":375,"description":376,"extension":83,"img":124,"meta":377,"navigation":85,"path":378,"seo":379,"stem":380,"tags":381,"updatedAt":375,"__hash__":383},"articles\u002Farticles\u002Fgetting-started-angular-wvisual-studio-aspnet-core.md","Getting Started Angular w\u002FVisual Studio ASP.NET Core",{"type":9,"value":111,"toc":373},[112,115,126,129,139,142,162,165,175,178,181,191,194,201,207,217,220,231,254,265,280,293,296,316,328,339,350,360,363],[12,113,114],{},"Starting a new project using the VS.NET 2017 latest release installed templates.",[12,116,117],{},[18,118,121],{"href":119,"target":120},"\u002Farticles\u002Fimages\u002Fimage_636774731987290862.png","_blank",[22,122],{"title":24,"style":123,"border":26,"alt":24,"src":124,"width":28,"height":125},"border: 0px currentcolor; border-image: none; display: inline; background-image: none;","\u002Farticles\u002Fimages\u002Fimage_thumb_636774731988097429.png",172,[12,127,128],{},"I end up with the following directory structure for hosting both my asp.net project and my angular client app.",[12,130,131],{},[18,132,134],{"href":133,"target":120},"\u002Farticles\u002Fimages\u002Fimage_636774731988761038.png",[22,135],{"title":24,"style":123,"border":26,"alt":24,"src":136,"width":137,"height":138},"\u002Farticles\u002Fimages\u002Fimage_thumb_636774731989514209.png",174,341,[12,140,141],{},"The template is equivalent to creating an ASP.NET Core projects to act as an API backend, and an Angular CLI project to act as a UI. The template offers the convenience of hosting both project types in a single app project.",[12,143,144,145,149,150,153,154,156,157,161],{},"Consequently, the app project can be built and published as a single unit. The project template creates an ASP.NET Core app ",[146,147,148],"strong",{},"and"," an Angular app. The ASP.NET Core app is intended to be used for data access, authorization, and other server-side concerns. The Angular app, residing in the ",[146,151,152],{},"ClientApp"," subdirectory, is intended to be used for all UI concerns.  The ",[146,155,152],{}," directory contains a standard Angular CLI app. See the official ",[18,158,160],{"href":159},"https:\u002F\u002Fgithub.com\u002Fangular\u002Fangular-cli\u002Fwiki","Angular documentation"," for more information.  Running ng commands – open command prompt, cd to the ClientApp directory.",[12,163,164],{},"If you have Angular CLI installed globally you can any of its commands i.e. ng lint, ng test etc. (if you do not have Angular CLI installed you can run via npm run ng (or npm run ng lint or npm run ng test). These npm commands reference the scripts setup in the package.json file",[12,166,167],{},[18,168,170],{"href":169},"\u002Farticles\u002Fimages\u002Fimage_636774731990182177.png",[22,171],{"title":24,"style":123,"border":26,"alt":24,"src":172,"width":173,"height":174},"\u002Farticles\u002Fimages\u002Fimage_thumb_636774731990903482.png",357,144,[12,176,177],{},"As we started this from an ASP.NET Core ‘Angular’ template – there is no need to run ng serve. Yes, read that again. The ASP.NET Core application has already been setup to serve both the c# ASP.NET Core parts as well as your client-side parts of the app.",[12,179,180],{},"How? Take a look at the Startup.cs file around app.UseSpa which starts both the Angular and ASP.NET sides of this application when you hit F5 (debug-run). The project is configured to start its own instance of the Angular CLI server in the background when the ASP.NET Core app starts in development mode. This makes it convenient as you don’t have to run a separate server manually (one for client app and one for the ASP.NET side)",[12,182,183],{},[18,184,186],{"href":185},"\u002Farticles\u002Fimages\u002Fimage_636774731991518749.png",[22,187],{"title":24,"style":123,"border":26,"alt":24,"src":188,"width":189,"height":190},"\u002Farticles\u002Fimages\u002Fimage_thumb_636774731992151351.png",361,97,[12,192,193],{},"The downside of letting VS.NET\u002FASP.NET Core run both sides, is that anytime c# is modified you will have to startup both the web and backend. This can be time consuming, as it does take some time to restart the web server. “The project is configured to start its own instance of the Angular CLI server in the background when the ASP.NET Core app starts in development mode”  To run Angular CLI server externally, independently of the ASP.NET Core process you can open a command prompt, navigate to the Clientapp directory and type npm start which as mentioned above can be found as a script within the package.json.\nRuns the following: “start” : “ng-serve --extract-css\"",[12,195,196,197],{},"As a side note: ",[198,199,200],"u",{},"Installing the Angular CLI Globally",[12,202,203,204,206],{},"npm --g @angluar\u002Fcli",[34,205],{},"\nng --version",[12,208,209],{},[18,210,212],{"href":211},"\u002Farticles\u002Fimages\u002Fimage_636774731992924046.png",[22,213],{"title":24,"style":123,"border":26,"alt":24,"src":214,"width":215,"height":216},"\u002Farticles\u002Fimages\u002Fimage_thumb_636774731993996308.png",624,389,[12,218,219],{},"ng new –help",[12,221,222],{},[18,223,225],{"href":224},"\u002Farticles\u002Fimages\u002Fimage_636774731995308632.png",[22,226],{"title":24,"style":227,"border":26,"alt":24,"src":228,"width":229,"height":230},"border-image: none; display: inline; background-image: none;","\u002Farticles\u002Fimages\u002Fimage_thumb_636774731996251347.png",500,461,[12,232,233,234,237,238,242,243,246,247],{},"Now if you try to start the Angular CLI web server from the command prompt referencing the global CLI you will see typical error\u002Fwarning   C:\\Temp\\Angular\\Wildermuth\\ClientApp>",[146,235,236],{},"ng serve ","    ",[239,240,241],"em",{}," Your global Angular CLI version (7.0.5) is greater than your local       version (1.7.0). The local Angular CLI version is used.","  Okay, so what is going on here. Yes my global version is 7.0.5 while my version in this solution can be found by looking at the package.json where you can see my local version within this project is \"@angular\u002Fcli\": \"~1.7.0\".\nBack to using ",[146,244,245],{},"npm start"," to launch the Angular CLI development server which will use the cli installed within the project i.e. version 1.7.0 (the configuration in package.json is respected)\n",[18,248,250],{"href":249},"\u002Farticles\u002Fimages\u002Fimage_636774731997045623.png",[22,251],{"title":24,"style":123,"border":26,"alt":24,"src":252,"width":28,"height":253},"\u002Farticles\u002Fimages\u002Fimage_thumb_636774731997855348.png",130,[12,255,256,257,260,264],{},"Now I can open a browser and navigate to ",[18,258],{"title":259,"href":259},"http:\u002F\u002Flocalhost:4200\u002F",[18,261,259],{"href":259,"rel":262},[263],"nofollow"," and my Hello World application\u002Fpage if visible.",[12,266,267,268,272,273,276,279],{},"Okay, one more option (these different approach are getting confusing). You can modify your ASP.NET Core app to use the external Angular CLI running instance instead of launching a new one on every F5 (debug-run). In your Startup.cs class, replace spa.UseAngularCliServer with the following: spa.UseProxyToSpaDevelopmentServer(“",[18,269,271],{"rel":270},[263],"https:\u002F\u002Flocalhost:4200”","); After making this change, and pressing F5 it opens a browser to this address ",[18,274],{"title":275,"href":275},"https:\u002F\u002Flocalhost:44399\u002F",[18,277,275],{"href":275,"rel":278},[263]," (I thought it would have been localhost:4200). Don’t fret, it is using the externally started server.",[12,281,282,283,286,289,290],{},"You can validate this by closing the previously opened command prompt (that was started from npm start), then refresh the ",[18,284],{"href":285},"https:\u002F\u002Flocahost:44399",[18,287,285],{"href":285,"rel":288},[263]," and you will see exceptions like …",[239,291,292],{},"SocketException: No connection could be made because the target machine actively refused it…",[12,294,295],{},"So, the pattern at this moment is   1. Modify Startup.cs (comment out the\nUseAngluarCliServer and add the UseProxyToSpaDevelopmentServer methods below)   \u002F\u002Fspa.UseAngularCliServer(npmScript: \"start\");",[12,297,298,299,302,305,306,309,310,312,315],{},"spa.UseProxyToSpaDevelopmentServer(",[18,300],{"href":301},"http:\u002F\u002Flocalhost:4200",[18,303,301],{"href":301,"rel":304},[263],");      2. Open command prompt, cd to ClientApp and type ",[146,307,308],{},"npm start ","(starts the web server, which will remain open while I code in VS.NET and pressing F5 will compile my c# and server it up in the existing web server created from npm start  Interestingly, you do not have to hit F5 all the time. So in this case, you started the Angular server with npm start, you did not start debugging with F5 however you can just open a browser and use the ",[18,311],{"title":275,"href":275},[18,313,275],{"href":275,"rel":314},[263]," address to view your page.",[12,317,318,319,321],{},"At this moment my code is not in debug mode. How can I attach a debugger, so I can once again step into the code (without hitting F5)? Yes you can. Open Debug – Attach To Process (and select dotnet.exe)  Refresh your page and now any breakpoints will be hit allowing you to step through your code.",[34,320],{},[18,322,324],{"href":323},"\u002Farticles\u002Fimages\u002Fimage_636774724358746757.png",[22,325],{"title":24,"style":25,"border":26,"alt":24,"src":326,"width":327,"height":28},"\u002Farticles\u002Fimages\u002Fimage_thumb_636774724359686912.png",229,[12,329,330,331],{},"With this template, navigation\u002Fpages are not served through MVC (controllers), your ASP.NET Core solution is really setup to server data through AJAX or Rest End Points only. This is a big change from ASP.NET Web Projects where navigating to a page would open a controller which would return a View (cshtml). This is a big change! This approach is very much inline with a true SPA (where one page is loaded and navigation between pages is performed locally within the html\u002Fjs via client-side routing)  One more thing for this post. With your browser open to the home of the application, open ClientApp\u002Fsrc\u002Fhome\u002Fhome.component.html in VS.NET. With both the browser and VS.NET visible modify Welcome to Welcome! and save the file. Notice that the browser was aware of the html\u002Fjs modification automatically, and refreshed the page. Now Welcome shows Welcome! all automatically.\n",[18,332,334],{"href":333},"\u002Farticles\u002Fimages\u002Fimage_636774724360363421.png",[22,335],{"title":24,"style":336,"border":26,"alt":24,"src":337,"width":28,"height":338},"margin: 0px; display: inline; background-image: none;","\u002Farticles\u002Fimages\u002Fimage_thumb_636774724361024657.png",78,[12,340,341,342,345,346,349],{},"In ",[146,343,344],{},"development",", the app runs in a mode optimized for developer convenience. For example, JavaScript bundles include source maps (so that when debugging, you can see your original TypeScript code). The app watches for TypeScript, HTML, and CSS file changes on disk and automatically recompiles and reloads when it sees those files change.  This does not occur with a deployed web application in production. In production, the apps files are optimized for performance. When you publish the build configuration emits a minified, ahead-of-time (AOT) compiled build of your client side code.  ",[146,347,348],{},"Deployment","  As a test I published my project to a local folder. Watching the Output window, I can see it creates a directory within my project …\\obj\\Release\\netcoreapp2.1\\PubTmp\\Out then runs the following:   npm install    npm run build --prod    ng build --extract-css “—prod”    Creating directory Publish\\ClientApp\\dist, copies file and finished.",[12,351,352],{},[18,353,355],{"href":354},"\u002Farticles\u002Fimages\u002Fimage_636774724361830597.png",[22,356],{"title":24,"style":25,"border":26,"alt":24,"src":357,"width":358,"height":359},"\u002Farticles\u002Fimages\u002Fimage_thumb_636774724362731671.png",355,165,[12,361,362],{},"How did it know to do all those commands? Open the .csproj, there you will find build steps integrated. This is beyond the scope of this post, however reading up on MSBuild documents may help. I do feel there is a lot to learn here however.",[12,364,365],{},[18,366,368],{"href":367},"\u002Farticles\u002Fimages\u002Fimage_636774724364079668.png",[22,369],{"title":24,"style":25,"border":26,"alt":24,"src":370,"width":371,"height":372},"\u002Farticles\u002Fimages\u002Fimage_thumb_636774724364950086.png",485,154,{"title":78,"searchDepth":79,"depth":79,"links":374},[],"2018-11-10T18:47:16.586Z","A tutorial on starting out with the Angular template within Visual Studio 2017.  Modern web development is new and different.  I liken it to when developers made the jump from classic asp to asp.net.  There is a learning curve!  Start small, challenge yourself to learn small tasks and over time a familiarity will give you more comfort.  Read more.",{},"\u002Farticles\u002Fgetting-started-angular-wvisual-studio-aspnet-core",{"title":109,"description":376},"articles\u002Fgetting-started-angular-wvisual-studio-aspnet-core",[382],"angular","EcxN8ODWjniqrt9rSc5VIej063ti2FC7LJ0qiePYUsU",{"id":385,"title":386,"author":7,"body":387,"createdAt":589,"description":590,"extension":83,"img":468,"meta":591,"navigation":85,"path":592,"seo":593,"stem":594,"tags":595,"updatedAt":589,"__hash__":598},"articles\u002Farticles\u002Fxunit-what-is-it-and-why-another-unit-testing-framework.md","xUnit–what is it and why another unit testing framework",{"type":9,"value":388,"toc":587},[389,395,429,432,436,549,552,566,569],[12,390,391,392,394],{},"Special thank you for Channel 9 and @skimedic for sharing his unit testing knowledge.",[34,393],{},"\nXUnit leverage some of the new features to help developers write cleaner test, as tests should be kept clean and treated as first-class citizens.",[396,397,398,402,405,417,420],"ul",{},[399,400,401],"li",{},"NUnit was not fully compatible with .NET Core 2 at the time",[399,403,404],{},"xUnit is aimed at improving test isolation and trying to codify a set of rules to establish a testing standard.",[399,406,407,408,412,413,416],{},"xUnit ",[409,410,411],"span",{},"Fact"," and ",[409,414,415],{},"Theory"," attributes are extensible, so you can implement your own testing functionality.xUnit doesn’t use Test Lists and .vsmdi files to keep track of your tests.",[399,418,419],{},"Microsoft is using xUnit internally, one of its creators is from Microsoft. xUnit was also created by one of the original authors of NUnit.",[399,421,422,423,426],{},"Side-by-side Performance Comparison of testing frameworks can be found here ",[18,424],{"title":425,"href":425},"https:\u002F\u002Fblogs.msdn.microsoft.com\u002Fvisualstudio\u002F2017\u002F11\u002F16\u002Ftest-experience-improvements\u002F",[18,427,425],{"href":425,"rel":428},[263],[12,430,431],{},"Where to get it and how to add it to your projects (2 ways)",[433,434,435],"ol",{},"  \n* Use Nuget to add xunit as well as the runner  \n* Add New Project – .NET Core xUnit Test Project  \n",[396,437,438,441,447,450,455,458,471,474,477,489,492,495,498,505,508,519,522,532,535,538],{},[399,439,440],{},"It does work with live unit testing",[399,442,443,444,446],{},"Add ",[409,445,411],{}," attribute on a method to mark it as a test",[399,448,449],{},"Use Theory and InlineData as mechanism to pass data into the test",[399,451,452,454],{},[409,453,415],{}," attribute to mark a method as a test and setup incoming parameters (2 approaches InlineData and MemberData)",[399,456,457],{},"[InlineData(1,2,3)",[399,459,460,461],{},"approach to pass data into the test method (add additional InlineData attributes for multiple runs of same test)\n",[18,462,464],{"href":463},"\u002Farticles\u002Fimages\u002FSNAGHTML2e5cfd1e_636767597902517481.png",[22,465],{"style":466,"title":467,"src":468,"alt":467,"width":469,"height":470,"border":26},"border: 0px currentcolor; display: inline; background-image: none;","SNAGHTML2e5cfd1e","\u002Farticles\u002Fimages\u002FSNAGHTML2e5cfd1e_thumb_636767597903473559.png",487,209,[399,472,473],{},"MemberData(nameof(IEnumerable\u003Cobject>",[399,475,476],{},"In the example below we are using a method to return data to be used (however this method could also read data from other files such as text or excel to be returned)",[399,478,479,480],{},"approach to pass data into the test method\n",[18,481,483],{"href":482},"\u002Farticles\u002Fimages\u002FSNAGHTML2e5bc0f5_636767597904435811.png",[22,484],{"style":466,"title":485,"src":486,"alt":485,"width":487,"height":488,"border":26},"SNAGHTML2e5bc0f5","\u002Farticles\u002Fimages\u002FSNAGHTML2e5bc0f5_thumb_636767597905425086.png",484,226,[399,490,491],{},"xUnit runs it’s tests in parallel to take advantage of today’s processors",[399,493,494],{},"tests within one class are run serial",[399,496,497],{},"tests in multiple classes are run parallel",[399,499,500,501,504],{},"can be disabled by creating a test collection (add attribute ",[409,502,503],{},"Collection({name})",", and all within the same collection will be run serial",[399,506,507],{},"in order to test that an exception is thrown",[399,509,510,511],{},"Assert.Throws\u003CInvalidOperationException>(() => ThrowAnError());\n",[18,512,514],{"href":513},"\u002Farticles\u002Fimages\u002Fimage_636767597907208471.png",[22,515],{"style":466,"title":24,"src":516,"alt":24,"width":517,"height":518,"border":26},"\u002Farticles\u002Fimages\u002Fimage_thumb_636767597908147368.png",452,301,[399,520,521],{},"Setup\u002FTeardown",[399,523,524,525,412,528,531],{},"There are no ",[409,526,527],{},"Setup",[409,529,530],{},"Teardown"," attributes, this is done using the test class’ constructor and an IDisposable. This encourages developers to write cleaner tests.",[399,533,534],{},"use constructor in place of Setup attributes to prepare tests",[399,536,537],{},"now use IDisposable to replace teardown i.e. public class ATestClass : IDisposable\npublic void Dispose() {\n   \u002F\u002Fsomething here to clean up\n}",[399,539,540,541],{},"for input\u002Foutput there exists ITestOutputHelper as shown below to output log\n",[18,542,544],{"href":543},"\u002Farticles\u002Fimages\u002Fimage_636767597909423747.png",[22,545],{"style":466,"title":24,"src":546,"alt":24,"width":547,"height":548,"border":26},"\u002Farticles\u002Fimages\u002Fimage_thumb_636767597910292790.png",447,240,[12,550,551],{},"Notes",[396,553,554,557],{},[399,555,556],{},"Works in .net core and .net framework",[399,558,559,560,563],{},"TODO: Read up on Live Unit Testing ",[18,561],{"title":562,"href":562},"https:\u002F\u002Fdocs.microsoft.com\u002Fen-us\u002Fvisualstudio\u002Ftest\u002Flive-unit-testing?view=vs-2017",[18,564,562],{"href":562,"rel":565},[263],[12,567,568],{},"References:",[570,571,572,573,576,577,580,581,576,584],"blockquote",{},"  \n",[18,574,575],{"title":575,"href":575},"https:\u002F\u002Fxunit.github.io\u002Fdocs\u002Fwhy-did-we-build-xunit-1.0.html"," \n",[18,578,579],{"title":579,"href":579},"https:\u002F\u002Fdev.to\u002Fhatsrumandcode\u002Fnet-core-2-why-xunit-and-not-nunit-or-mstest--aei","   \n",[18,582,583],{"title":583,"href":583},"https:\u002F\u002Fchannel9.msdn.com\u002FShows\u002FVisual-Studio-Toolbox\u002FUnit-Testing-xUnit",[18,585,586],{"title":586,"href":586},"https:\u002F\u002Fxunit.github.io\u002F",{"title":78,"searchDepth":79,"depth":79,"links":588},[],"2018-11-02T12:49:51.111Z","Primarily XUnit leverages some new features to help developers write cleaner test, as tests should be kept clean and treated as first-class citizens.",{},"\u002Farticles\u002Fxunit-what-is-it-and-why-another-unit-testing-framework",{"title":386,"description":590},"articles\u002Fxunit-what-is-it-and-why-another-unit-testing-framework",[596,597],"netcore","testing","Xa57WSBlnynbn4MUPddzdtkn0rAmRbojbJ2tqgZD33w",1781574769504]