Search Results

Search found 49452 results on 1979 pages for 'type testing'.

Page 19/1979 | < Previous Page | 15 16 17 18 19 20 21 22 23 24 25 26  | Next Page >

  • Recommended crossbrowser testing solution

    - by Kaaviar
    Hi, When developing for the web, one of the saddest issue might be crossbrowser testing. Is there a great solution for testing both on IE6, IE7, IE8, Chrome, Safari and Firefox ? I tried some web-based solutions but it's not really usable when working offline. Thx Boris

    Read the article

  • Unit Testing - not testable code converted to testable code

    - by imak
    I have read so many places is that if your code is not test-able that mean code is not well written. So that makes me start writing a code that is test-able and to start using some unit testing framework. With this though I start looking for some example with piece of code that is not testable and gradually converted to a testable code. I find tons of examples on unit testing but if someone can provide an example like above it probably can jump start things for me. TIA

    Read the article

  • Reflection: How to get the underlying type of a by-ref type

    - by Qwertie
    I was surprised to learn that "ref" and "out" parameters are not marked by a special attribute, despite the existence of ParameterInfo.IsOut, ParameterInfo.IsIn (both of which are always false as far as I can see), ParameterAttributes.In and ParameterAttributes.Out. Instead, "ref" parameters are actually represented by a special kind of "Type" object and "out" parameters are just ref parameters with an additional attribute (what kind of attribute I don't yet know). Anyway, to make a by-ref argument you call Type.MakeByRefType(), but my question is, if you already have a by-ref type, how do you get back to the original Type? Hint: it's not UnderlyingSystemType: Type t = typeof(int); Console.WriteLine(t.MakeByRefType().UnderlyingSystemType==t); // FALSE

    Read the article

  • Testing stored procedures

    - by giri
    Hi , How to test procedures with record type parameters.I have a procedure which takes test_ap ,basic and user_name as inputs.where test_ap is of record/row type,basic record array type and user_name charater varying. I need to test the procedure in pgadmin. test_client(test_ap test_base, basic test_base_detail[], user_name character varying) Any suggestions plz.

    Read the article

  • Mocking ISession.Query<T>() for testing consumer

    - by TheCloudlessSky
    I'm trying to avoid using an in memory database for testing (though I might have to do this if the following is impossible). I'm using NHibernate 3.0 with LINQ. I'd like to be able to mock session.Query<T>() to return some dummy values but I can't since it's an extension method and these are pretty much impossible to test. Does anyone have any suggestions (other than using an in memory database) for testing session queries with LINQ?

    Read the article

  • The dynamic Type in C# Simplifies COM Member Access from Visual FoxPro

    - by Rick Strahl
    I’ve written quite a bit about Visual FoxPro interoperating with .NET in the past both for ASP.NET interacting with Visual FoxPro COM objects as well as Visual FoxPro calling into .NET code via COM Interop. COM Interop with Visual FoxPro has a number of problems but one of them at least got a lot easier with the introduction of dynamic type support in .NET. One of the biggest problems with COM interop has been that it’s been really difficult to pass dynamic objects from FoxPro to .NET and get them properly typed. The only way that any strong typing can occur in .NET for FoxPro components is via COM type library exports of Visual FoxPro components. Due to limitations in Visual FoxPro’s type library support as well as the dynamic nature of the Visual FoxPro language where few things are or can be described in the form of a COM type library, a lot of useful interaction between FoxPro and .NET required the use of messy Reflection code in .NET. Reflection is .NET’s base interface to runtime type discovery and dynamic execution of code without requiring strong typing. In FoxPro terms it’s similar to EVALUATE() functionality albeit with a much more complex API and corresponiding syntax. The Reflection APIs are fairly powerful, but they are rather awkward to use and require a lot of code. Even with the creation of wrapper utility classes for common EVAL() style Reflection functionality dynamically access COM objects passed to .NET often is pretty tedious and ugly. Let’s look at a simple example. In the following code I use some FoxPro code to dynamically create an object in code and then pass this object to .NET. An alternative to this might also be to create a new object on the fly by using SCATTER NAME on a database record. How the object is created is inconsequential, other than the fact that it’s not defined as a COM object – it’s a pure FoxPro object that is passed to .NET. Here’s the code: *** Create .NET COM InstanceloNet = CREATEOBJECT('DotNetCom.DotNetComPublisher') *** Create a Customer Object Instance (factory method) loCustomer = GetCustomer() loCustomer.Name = "Rick Strahl" loCustomer.Company = "West Wind Technologies" loCustomer.creditLimit = 9999999999.99 loCustomer.Address.StreetAddress = "32 Kaiea Place" loCustomer.Address.Phone = "808 579-8342" loCustomer.Address.Email = "[email protected]" *** Pass Fox Object and echo back values ? loNet.PassRecordObject(loObject) RETURN FUNCTION GetCustomer LOCAL loCustomer, loAddress loCustomer = CREATEOBJECT("EMPTY") ADDPROPERTY(loCustomer,"Name","") ADDPROPERTY(loCustomer,"Company","") ADDPROPERTY(loCUstomer,"CreditLimit",0.00) ADDPROPERTY(loCustomer,"Entered",DATETIME()) loAddress = CREATEOBJECT("Empty") ADDPROPERTY(loAddress,"StreetAddress","") ADDPROPERTY(loAddress,"Phone","") ADDPROPERTY(loAddress,"Email","") ADDPROPERTY(loCustomer,"Address",loAddress) RETURN loCustomer ENDFUNC Now prior to .NET 4.0 you’d have to access this object passed to .NET via Reflection and the method code to do this would looks something like this in the .NET component: public string PassRecordObject(object FoxObject) { // *** using raw Reflection string Company = (string) FoxObject.GetType().InvokeMember( "Company", BindingFlags.GetProperty,null, FoxObject,null); // using the easier ComUtils wrappers string Name = (string) ComUtils.GetProperty(FoxObject,"Name"); // Getting Address object – then getting child properties object Address = ComUtils.GetProperty(FoxObject,"Address");    string Street = (string) ComUtils.GetProperty(FoxObject,"StreetAddress"); // using ComUtils 'Ex' functions you can use . Syntax     string StreetAddress = (string) ComUtils.GetPropertyEx(FoxObject,"AddressStreetAddress"); return Name + Environment.NewLine + Company + Environment.NewLine + StreetAddress + Environment.NewLine + " FOX"; } Note that the FoxObject is passed in as type object which has no specific type. Since the object doesn’t exist in .NET as a type signature the object is passed without any specific type information as plain non-descript object. To retrieve a property the Reflection APIs like Type.InvokeMember or Type.GetProperty().GetValue() etc. need to be used. I made this code a little simpler by using the Reflection Wrappers I mentioned earlier but even with those ComUtils calls the code is pretty ugly requiring passing the objects for each call and casting each element. Using .NET 4.0 Dynamic Typing makes this Code a lot cleaner Enter .NET 4.0 and the dynamic type. Replacing the input parameter to the .NET method from type object to dynamic makes the code to access the FoxPro component inside of .NET much more natural: public string PassRecordObjectDynamic(dynamic FoxObject) { // *** using raw Reflection string Company = FoxObject.Company; // *** using the easier ComUtils class string Name = FoxObject.Name; // *** using ComUtils 'ex' functions to use . Syntax string Address = FoxObject.Address.StreetAddress; return Name + Environment.NewLine + Company + Environment.NewLine + Address + Environment.NewLine + " FOX"; } As you can see the parameter is of type dynamic which as the name implies performs Reflection lookups and evaluation on the fly so all the Reflection code in the last example goes away. The code can use regular object ‘.’ syntax to reference each of the members of the object. You can access properties and call methods this way using natural object language. Also note that all the type casts that were required in the Reflection code go away – dynamic types like var can infer the type to cast to based on the target assignment. As long as the type can be inferred by the compiler at compile time (ie. the left side of the expression is strongly typed) no explicit casts are required. Note that although you get to use plain object syntax in the code above you don’t get Intellisense in Visual Studio because the type is dynamic and thus has no hard type definition in .NET . The above example calls a .NET Component from VFP, but it also works the other way around. Another frequent scenario is an .NET code calling into a FoxPro COM object that returns a dynamic result. Assume you have a FoxPro COM object returns a FoxPro Cursor Record as an object: DEFINE CLASS FoxData AS SESSION OlePublic cAppStartPath = "" FUNCTION INIT THIS.cAppStartPath = ADDBS( JustPath(Application.ServerName) ) SET PATH TO ( THIS.cAppStartpath ) ENDFUNC FUNCTION GetRecord(lnPk) LOCAL loCustomer SELECT * FROM tt_Cust WHERE pk = lnPk ; INTO CURSOR TCustomer IF _TALLY < 1 RETURN NULL ENDIF SCATTER NAME loCustomer MEMO RETURN loCustomer ENDFUNC ENDDEFINE If you call this from a .NET application you can now retrieve this data via COM Interop and cast the result as dynamic to simplify the data access of the dynamic FoxPro type that was created on the fly: int pk = 0; int.TryParse(Request.QueryString["id"],out pk); // Create Fox COM Object with Com Callable Wrapper FoxData foxData = new FoxData(); dynamic foxRecord = foxData.GetRecord(pk); string company = foxRecord.Company; DateTime entered = foxRecord.Entered; This code looks simple and natural as it should be – heck you could write code like this in days long gone by in scripting languages like ASP classic for example. Compared to the Reflection code that previously was necessary to run similar code this is much easier to write, understand and maintain. For COM interop and Visual FoxPro operation dynamic type support in .NET 4.0 is a huge improvement and certainly makes it much easier to deal with FoxPro code that calls into .NET. Regardless of whether you’re using COM for calling Visual FoxPro objects from .NET (ASP.NET calling a COM component and getting a dynamic result returned) or whether FoxPro code is calling into a .NET COM component from a FoxPro desktop application. At one point or another FoxPro likely ends up passing complex dynamic data to .NET and for this the dynamic typing makes coding much cleaner and more readable without having to create custom Reflection wrappers. As a bonus the dynamic runtime that underlies the dynamic type is fairly efficient in terms of making Reflection calls especially if members are repeatedly accessed. © Rick Strahl, West Wind Technologies, 2005-2010Posted in COM  FoxPro  .NET  CSharp  

    Read the article

  • Constructor on type: "Namespace.type" not found.

    - by Nick
    Hello, I am using Castle.Windsor as an IOC. So I am trying to resolve a service type in the constructor of an HTTPHandler. I keep receiving this error, "Constructor on type: "Namespace.type" not found." My configuration has the following entries for service type: IDocumentDirectory <component id="restricted.content.directory" service="org.healthwise.foundations.services.content.IDocumentDirectory, org.healthwise.foundations.services" type="org.healthwise.foundations.services.content.RestrictedLocalizationDocumentDirectory, org.healthwise.foundations.services"> <parameters> <contentDirectory>${content.directory}</contentDirectory> <localizations> <array> <item>en-us</item> <item>es-us</item> </array> </localizations> </parameters> </component> <component id="content.directory" service="org.healthwise.foundations.services.content.IDocumentDirectory, org.healthwise.foundations.services" type="org.healthwise.foundations.services.web.client.WebServiceDocumentDirectory, org.healthwise.foundations.services.web.client"> <parameters> <webServiceURL>#{contentDirectoryWebsiteUrl}</webServiceURL> </parameters> </component> In my new handler the constructor looks like this: public HeartBeatHttpHandler(IDocumentDirectory contentDirectory) { _contentDirectory = contentDirectory; } I have never recieved this error using Castle.Windsor. Can someone explain? Thanks!

    Read the article

  • codingBat separateThousands using regex (and unit testing how-to)

    - by polygenelubricants
    This question is a combination of regex practice and unit testing practice. Regex part I authored this problem separateThousands for personal practice: Given a number as a string, introduce commas to separate thousands. The number may contain an optional minus sign, and an optional decimal part. There will not be any superfluous leading zeroes. Here's my solution: String separateThousands(String s) { return s.replaceAll( String.format("(?:%s)|(?:%s)", "(?<=\\G\\d{3})(?=\\d)", "(?<=^-?\\d{1,3})(?=(?:\\d{3})+(?!\\d))" ), "," ); } The way it works is that it classifies two types of commas, the first, and the rest. In the above regex, the rest subpattern actually appears before the first. A match will always be zero-length, which will be replaceAll with ",". The rest basically looks behind to see if there was a match followed by 3 digits, and looks ahead to see if there's a digit. It's some sort of a chain reaction mechanism triggered by the previous match. The first basically looks behind for ^ anchor, followed by an optional minus sign, and between 1 to 3 digits. The rest of the string from that point must match triplets of digits, followed by a nondigit (which could either be $ or \.). My question for this part is: Can this regex be simplified? Can it be optimized further? Ordering rest before first is deliberate, since first is only needed once No capturing group Unit testing part As I've mentioned, I'm the author of this problem, so I'm also the one responsible for coming up with testcases for them. Here they are: INPUT, OUTPUT "1000", "1,000" "-12345", "-12,345" "-1234567890.1234567890", "-1,234,567,890.1234567890" "123.456", "123.456" ".666666", ".666666" "0", "0" "123456789", "123,456,789" "1234.5678", "1,234.5678" "-55555.55555", "-55,555.55555" "0.123456789", "0.123456789" "123456.789", "123,456.789" I haven't had much experience with industrial-strength unit testing, so I'm wondering if others can comment whether this is a good coverage, whether I've missed anything important, etc (I can always add more tests if there's a scenario I've missed).

    Read the article

  • Testing system where App-level and Request-level IoC containers exist

    - by Bobby
    My team is in the process of developing a system where we're using Unity as our IoC container; and to provide NHibernate ISessions (Units of work) over each HTTP Request, we're using Unity's ChildContainer feature to create a child container for each request, and sticking the ISession in there. We arrived at this approach after trying others (including defining per-request lifetimes in the container, but there are issues there) and are now trying to decide on a unit testing strategy. Right now, the application-level container itself is living in the HttpApplication, and the Request container lives in the HttpContext.Current. Obviously, neither exist during testing. The pain increases when we decided to use Service Location from our Domain layer, to "lazily" resolve dependencies from the container. So now we have more components wanting to talk to the container. We are also using MSTest, which presents some concurrency dilemmas during testing as well. So we're wondering, what do the bright folks out there in the SO community do to tackle this predicament? How does one setup an application that, during "real" runtime, relies on HTTP objects to hold the containers, but during test has the flexibility to build-up and tear-down the containers consistently, and have the ServiceLocation bits get to those precise containers. I hope the question is clear, thanks!

    Read the article

  • Unit Testing in the real world

    - by Malfist
    I manage a rather large application (50k+ lines of code) by myself, and it manages some rather critical business actions. To describe the program simple, I would say it's a fancy UI with the ability to display and change data from the database, and it's managing around 1,000 rental units, and about 3k tenants and all the finances. When I make changes, because it's so large of a code base, I sometimes break something somewhere else. I typically test it by going though the stuff I changed at the functional level (i.e. I run the program and work through the UI), but I can't test for every situation. That is why I want to get started with unit testing. However, this isn't a true, three tier program with a database tier, a business tier, and a UI tier. A lot of the business logic is performed in the UI classes, and many things are done on events. To complicate things, everything is database driven, and I've not seen (so far) good suggestions on how to unit test database interactions. How would be a good way to get started with unit testing for this application. Keep in mind. I've never done unit testing or TDD before. Should I rewrite it to remove the business logic from the UI classes (a lot of work)? Or is there a better way?

    Read the article

  • Convincing why testing is good

    - by FireAphis
    Hello, In my team of real-time-embedded C/C++ developers, most people don't have any culture of testing their code beyond the casual manual sanity checks. I personally strongly believe in advantages of autonomous automatic tests, but when I try to convince I get some reappearing arguments like: We will spend more time on writing the tests than writing the code. It takes a lot of effort to maintain the tests. Our code is spaghetti; no way we can unit-test it. Our requirement are not sealed – we’ll have to rewrite all the tests every time the requirements are changed. Now, I'd gladly hear any convincing tips and advises, but what I am really looking for are references to researches, articles, books or serious surveys that show (preferably in numbers) how testing is worth the effort. Something like "We in IBM/Microsoft/Google, surveying 3475 active projects, found out that putting 50% more development time into testing decreased by 75% the time spent on fixing bugs" or "after half a year, the time needed to write code with test was only marginally longer than what used to take without tests". Any ideas? P.S.: I'm adding C++ tag too in case someone has a specific experience with convincing this, usually elitist, type of developers :-)

    Read the article

  • Unit testing a method with many possible outcomes

    - by Cthulhu
    I've built a simple~ish method that constructs an URL out of approximately 5 parts: base address, port, path, 'action', and a set of parameters. Out of these, only the address part is mandatory, the other parts are all optional. A valid URL has to come out of the method for each permutation of input parameters, such as: address address port address port path address path address action address path action address port action address port path action address action params address path action params address port action params address port path action params andsoforth. The basic approach for this is to write one unit test for each of these possible outcomes, each unit test passing the address and any of the optional parameters to the method, and testing the outcome against the expected output. However, I wonder, is there a Better (tm) way to handle a case like this? Are there any (good) unit test patterns for this? (rant) I only now realize that I've learned to write unit tests a few years ago, but never really (feel like) I've advanced in the area, and that every unit test is a repeat of building parameters, expected outcome, filling mock objects, calling a method and testing the outcome against the expected outcome. I'm pretty sure this is the way to go in unit testing, but it gets kinda tedious, yanno. Advice on that matter is always welcome. (/rant) (note) christmas weekend approaching, probably won't reply to suggestions until next week. (/note)

    Read the article

  • Are there any tools for testing drag & drop Windows desktop applications?

    - by Andrew
    I need to develop a Windows desktop application (win32 API) which will use drag & drop extensively in many formats, including my own. I need to test it, for example, with CF_TEXT dragging, CF_RTF, CF_DIB, CF_METAFILEPICT, and many others. The tool needs to have the following features: Displaying the content of DataObject dragged into it with all available format viewers. Allows preparation of a few samples of different clipboard formats together in a single DataObject, ready for dragging into my app. Allows including my own format names into the formats list of the testing tool.

    Read the article

  • Google I/O 2010 - Testing techniques for Google App Engine

    Google I/O 2010 - Testing techniques for Google App Engine Google I/O 2010 - Testing techniques for Google App Engine App Engine 201 Max Ross We typically write tests assuming that our development stack closely resembles our production stack. What if our target environment only lives in the cloud? We will highlight the key differences between typical testing techniques and Google App Engine testing techniques. We will also present concrete strategies for testing against local and cloud-based implementations of App Engine services. Finally, we will explain how to use App Engine as a highly parallel test harness that runs existing test suites without modification. For all I/O 2010 sessions, please go to code.google.com/events/io/2010/sessions.html From: GoogleDevelopers Views: 6 1 ratings Time: 54:29 More in Science & Technology

    Read the article

  • Has Microsoft stopped offering the free Internet Explorer Application Compatibility VPC Image for IE 6 testing?

    - by Paul D. Waite
    For some time now, Microsoft has made available free, stripped-down, time-limited Virtual PC images for testing web apps in older versions of IE. The most recent version is here: http://www.microsoft.com/download/en/details.aspx?id=11575 But the XP VPC image has now expired (14th Aug 2011), meaning one can no longer test IE 6 using this method. Have Microsoft made updated XP VPC images available? If not, have they commented on the situation? Do they provide any alternative method to test web apps in IE 6? Update As noted by @PleaseStand, as of 16th Aug 2011, Microsoft has made updated images available that expire on 17th November 2011.

    Read the article

  • What is a good solution for UA testing multiple projects simultaneously?

    - by Eric Belair
    My client often has several projects/tasks going at once that sometimes need to be tested simultaneously on one website. They are often separate applications on the website, but sometimes share UDFs, etc. We currently have 3 public-facing environment websites - i.e. dev.website.com, test.website.com, and www.website.com. As the programmer, I'm trying to find a good solution to allow for UA testing of multiple projects/tasks at once. Currently, I'm finding myself switching between code branches (using SubVersion). What some of my options?

    Read the article

  • What is the difference between type and type.__new__ in python?

    - by Jason Baker
    I was writing a metaclass and accidentally did it like this: class MetaCls(type): def __new__(cls, name, bases, dict): return type(name, bases, dict) ...instead of like this: class MetaCls(type): def __new__(cls, name, bases, dict): return type.__new__(cls, name, bases, dict) What exactly is the difference between these two metaclasses? And more specifically, what caused the first one to not work properly (some classes weren't called into by the metaclass)?

    Read the article

  • FORTRAN: determine variable type

    - by tibbs
    hello, GOOGLE has yet to find an answer for me, so here goes: In FORTRAN, is there a way to determine the TYPE of a variable? E.G., pass the variable type as an argument in a function, to then be able to call type-specific code with that fuction; eliminating the need to have seperate similar functions for each data type. thanks.

    Read the article

  • loading xml into SQL Server 2008 using sqlbulkload component

    - by mohamed
    "Error: Schema: relationship expected on 'headerRecord'." I get the above error while load xml file to SQL Server 2008 using SQLXMLBulkLoad4 Component , the xml file contains Call Detail records, I have generated schema file from xml file using both , Dataset and XSD.exe tool, but the error remains same., if there is another way to imports xml file with multiple tables that have relationship in each file into SQL Server 2008? . Here the xml file: <CallEventDataFile> <headerRecord> <productionDateTime>0912021247482B0300</productionDateTime> <recordingEntity>00</recordingEntity> <extensions/> </headerRecord> <callEventRecords> <mtSMSRecord> <recordType>7</recordType> <serviceCentre>91521230</serviceCentre> <servedIMSI>36570000031728F2</servedIMSI> <servedIMEI>53886000707896F0</servedIMEI> <servedMSISDN>915212454503F2</servedMSISDN> <msClassmark>3319A1</msClassmark> <recordingEntity>915212110100</recordingEntity> <location> <locationAreaCode>0006</locationAreaCode> <cellIdentifier>0C6E</cellIdentifier> </location> <deliveryTime>0912021535412B0300</deliveryTime> <systemType> <gERAN/> </systemType> <basicService> <teleservice>21</teleservice> </basicService> <additionalChgInfo> <chargeIndicator>2</chargeIndicator> </additionalChgInfo> <chargedParty> <calledParty/> </chargedParty> <orgRNCorBSCId>8E1A</orgRNCorBSCId> <orgMSCId>921A</orgMSCId> <globalAreaID>36F70500060C6E</globalAreaID> <subscriberCategory>0A</subscriberCategory> <firstmccmnc>36F705</firstmccmnc> <smsUserDataType>FF</smsUserDataType> <origination>8191F2</origination> <callReference>1605EB2FE1</callReference> </mtSMSRecord> <moSMSRecord> <recordType>6</recordType> <servedIMSI>36570000238707F9</servedIMSI> <servedIMEI>53928320195925F0</servedIMEI> <servedMSISDN>915212159430F2</servedMSISDN> <msClassmark>3319A2</msClassmark> <serviceCentre>91521230</serviceCentre> <recordingEntity>915212110100</recordingEntity> <location> <locationAreaCode>001B</locationAreaCode> <cellIdentifier>6983</cellIdentifier> </location> <messageReference>01</messageReference> <originationTime>0912021535412B0300</originationTime> <destinationNumber>8111F1</destinationNumber> <systemType> <gERAN/> </systemType> <basicService> <teleservice>22</teleservice> </basicService> <additionalChgInfo> <chargeIndicator>2</chargeIndicator> </additionalChgInfo> <chargedParty> <callingParty/> </chargedParty> <orgRNCorBSCId>8F1A</orgRNCorBSCId> <orgMSCId>921A</orgMSCId> <globalAreaID>36F705001B6983</globalAreaID> <subscriberCategory>0A</subscriberCategory> <firstmccmnc>36F705</firstmccmnc> <smsUserDataType>FF</smsUserDataType> <callReference>1701BED4FF</callReference> </moSMSRecord> <ssActionRecord> <recordType>10</recordType> <servedIMSI>36570000636448F8</servedIMSI> <servedIMEI>53246030714961F0</servedIMEI> <servedMSISDN>915212056928F8</servedMSISDN> <msClassmark>3018A1</msClassmark> <recordingEntity>915212110100</recordingEntity> <location> <locationAreaCode>000C</locationAreaCode> <cellIdentifier>05A5</cellIdentifier> </location> <supplService>FF</supplService> <ssAction> <ussdInvocation/> </ssAction> <ssActionTime>0912021535412B0300</ssActionTime> <ssParameters> <unstructuredData>AA5C2E3702</unstructuredData> </ssParameters> <callReference>1701BED500</callReference> <systemType> <gERAN/> </systemType> <ussdCodingScheme>0F</ussdCodingScheme> <ussdString> <UssdString>AA5C2E3702</UssdString> </ussdString> <ussdRequestCounter>1</ussdRequestCounter> <additionalChgInfo> <chargeIndicator>1</chargeIndicator> </additionalChgInfo> <orgRNCorBSCId>8E1A</orgRNCorBSCId> <orgMSCId>921A</orgMSCId> <globalAreaID>36F705000C05A5</globalAreaID> <subscriberCategory>0A</subscriberCategory> <firstmccmnc>36F705</firstmccmnc> </ssActionRecord> <moCallRecord> <recordType>0</recordType> <servedIMSI>36570000807501F5</servedIMSI> <servedIMEI>53246030713955F0</servedIMEI> <servedMSISDN>915212157901F0</servedMSISDN> <callingNumber>A151911700</callingNumber> <calledNumber>8151677589</calledNumber> <roamingNumber>A111113850</roamingNumber> <recordingEntity>915212110100</recordingEntity> <mscIncomingROUTE> <rOUTEName>HWBSC2</rOUTEName> </mscIncomingROUTE> <mscOutgoingROUTE> <rOUTEName>HWBSC2</rOUTEName> </mscOutgoingROUTE> <location> <locationAreaCode>0006</locationAreaCode> <cellIdentifier>0C2F</cellIdentifier> </location> <basicService> <teleservice>11</teleservice> </basicService> <msClassmark>3319A1</msClassmark> <answerTime>0912021535382B0300</answerTime> <releaseTime>0912021535422B0300</releaseTime> <callDuration>4</callDuration> <radioChanRequested> <dualFullRatePreferred/> </radioChanRequested> <radioChanUsed> <halfRate/> </radioChanUsed> <causeForTerm>0</causeForTerm> <diagnostics> <gsm0408Cause>144</gsm0408Cause> </diagnostics> <callReference>1701BED501</callReference> <additionalChgInfo> <chargeIndicator>2</chargeIndicator> </additionalChgInfo> <gsm-SCFAddress>915212110130</gsm-SCFAddress> <serviceKey>1</serviceKey> <networkCallReference>171D555132</networkCallReference> <mSCAddress>915212110100</mSCAddress> <speechVersionSupported>25</speechVersionSupported> <speechVersionUsed>21</speechVersionUsed> <numberOfDPEncountered>3</numberOfDPEncountered> <levelOfCAMELService>01</levelOfCAMELService> <freeFormatData>800130</freeFormatData> <systemType> <gERAN/> </systemType> <classmark3>C000</classmark3> <chargedParty> <callingParty/> </chargedParty> <mscOutgoingCircuit>1051</mscOutgoingCircuit> <orgRNCorBSCId>8E1A</orgRNCorBSCId> <orgMSCId>921A</orgMSCId> <calledIMSI>36570000635618F8</calledIMSI> <globalAreaID>36F70500060C2F</globalAreaID> <subscriberCategory>0A</subscriberCategory> <firstmccmnc>36F705</firstmccmnc> <lastmccmnc>36F705</lastmccmnc> </moCallRecord> <mtCallRecord> <recordType>1</recordType> <servedIMSI>36570000635618F8</servedIMSI> <servedIMEI>53464010474309F0</servedIMEI> <servedMSISDN>915212755697F8</servedMSISDN> <callingNumber>A151911700</callingNumber> <recordingEntity>915212110100</recordingEntity> <mscIncomingROUTE> <rOUTEName>HWBSC2</rOUTEName> </mscIncomingROUTE> <mscOutgoingROUTE> <rOUTEName>HWBSC2</rOUTEName> </mscOutgoingROUTE> <location> <locationAreaCode>0006</locationAreaCode> <cellIdentifier>0C2D</cellIdentifier> </location> <basicService> <teleservice>11</teleservice> </basicService> <supplServicesUsed> <SuppServiceUsedid> <ssCode>11</ssCode> <ssTime>0912021535382B0300</ssTime> </SuppServiceUsedid> </supplServicesUsed> <msClassmark>331981</msClassmark> <answerTime>0912021535382B0300</answerTime> <releaseTime>0912021535422B0300</releaseTime> <callDuration>4</callDuration> <radioChanRequested> <dualFullRatePreferred/> </radioChanRequested> <radioChanUsed> <halfRate/> </radioChanUsed> <causeForTerm>0</causeForTerm> <diagnostics> <gsm0408Cause>144</gsm0408Cause> </diagnostics> <callReference>1701BED502</callReference> <additionalChgInfo> <chargeIndicator>2</chargeIndicator> </additionalChgInfo> <networkCallReference>171D555132</networkCallReference> <mSCAddress>915212110100</mSCAddress> <speechVersionSupported>25</speechVersionSupported> <speechVersionUsed>21</speechVersionUsed> <systemType> <gERAN/> </systemType> <classmark3>C000</classmark3> <chargedParty> <calledParty/> </chargedParty> <roamingNumber>A111113850</roamingNumber> <mscIncomingCircuit>9119</mscIncomingCircuit> <orgRNCorBSCId>8E1A</orgRNCorBSCId> <orgMSCId>921A</orgMSCId> <globalAreaID>36F70500060C2D</globalAreaID> <subscriberCategory>0A</subscriberCategory> <firstmccmnc>36F705</firstmccmnc> <lastmccmnc>36F705</lastmccmnc> </mtCallRecord> <incGatewayRecord> <recordType>3</recordType> <callingNumber>A17005991565</callingNumber> <calledNumber>A1853643F7</calledNumber> <recordingEntity>915212110100</recordingEntity> <mscIncomingROUTE> <rOUTEName>ZPSTN</rOUTEName> </mscIncomingROUTE> <mscOutgoingROUTE> <rOUTEName>ZTEBSC3</rOUTEName> </mscOutgoingROUTE> <answerTime>0912021535302B0300</answerTime> <releaseTime>0912021535422B0300</releaseTime> <callDuration>12</callDuration> <causeForTerm>0</causeForTerm> <diagnostics> <gsm0408Cause>144</gsm0408Cause> </diagnostics> <callReference>2203AFBF84</callReference> <basicService> <teleservice>11</teleservice> </basicService> <additionalChgInfo> <chargeIndicator>2</chargeIndicator> </additionalChgInfo> <roamingNumber>A111111980</roamingNumber> <mscIncomingCircuit>934</mscIncomingCircuit> <orgMSCId>921A</orgMSCId> <mscIncomingRouteAttribute> <isup/> </mscIncomingRouteAttribute> <networkCallReference>22432B5132</networkCallReference> </incGatewayRecord> <outGatewayRecord> <recordType>4</recordType> <callingNumber>A151012431</callingNumber> <calledNumber>817026936873</calledNumber> <recordingEntity>915212110100</recordingEntity> <mscIncomingROUTE> <rOUTEName>HWBSC</rOUTEName> </mscIncomingROUTE> <mscOutgoingROUTE> <rOUTEName>ZPSTN</rOUTEName> </mscOutgoingROUTE> <answerTime>0912021535192B0300</answerTime> <releaseTime>0912021535432B0300</releaseTime> <callDuration>24</callDuration> <causeForTerm>0</causeForTerm> <diagnostics> <gsm0408Cause>144</gsm0408Cause> </diagnostics> <callReference>2303B19880</callReference> <basicService> <teleservice>11</teleservice> </basicService> <additionalChgInfo> <chargeIndicator>2</chargeIndicator> </additionalChgInfo> <mscOutgoingCircuit>398</mscOutgoingCircuit> <orgMSCId>921A</orgMSCId> <mscOutgoingRouteAttribute> <isup/> </mscOutgoingRouteAttribute> <networkCallReference>238BE55132</networkCallReference> </outGatewayRecord> </callEventRecords> <trailerRecord> <productionDateTime>0912021247512B0300</productionDateTime> <recordingEntity>00</recordingEntity> <firstCallDateTime>000000000000000000</firstCallDateTime> <lastCallDateTime>000000000000000000</lastCallDateTime> <noOfRecords>521</noOfRecords> <extensions/> </trailerRecord> <extensions/> </CallEventDataFile> Schema File generated by Dataset: <?xml version="1.0" standalone="yes"?> <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xs:element name="location"> <xs:complexType> <xs:sequence> <xs:element name="locationAreaCode" type="xs:string" minOccurs="0" /> <xs:element name="cellIdentifier" type="xs:string" minOccurs="0" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="systemType"> <xs:complexType> <xs:sequence> <xs:element name="gERAN" type="xs:string" minOccurs="0" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="basicService"> <xs:complexType> <xs:sequence> <xs:element name="teleservice" type="xs:string" minOccurs="0" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="additionalChgInfo"> <xs:complexType> <xs:sequence> <xs:element name="chargeIndicator" type="xs:string" minOccurs="0" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="chargedParty"> <xs:complexType> <xs:sequence> <xs:element name="calledParty" type="xs:string" minOccurs="0" /> <xs:element name="callingParty" type="xs:string" minOccurs="0" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="mscIncomingROUTE"> <xs:complexType> <xs:sequence> <xs:element name="rOUTEName" type="xs:string" minOccurs="0" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="mscOutgoingROUTE"> <xs:complexType> <xs:sequence> <xs:element name="rOUTEName" type="xs:string" minOccurs="0" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="radioChanRequested"> <xs:complexType> <xs:sequence> <xs:element name="dualFullRatePreferred" type="xs:string" minOccurs="0" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="radioChanUsed"> <xs:complexType> <xs:sequence> <xs:element name="halfRate" type="xs:string" minOccurs="0" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="diagnostics"> <xs:complexType> <xs:sequence> <xs:element name="gsm0408Cause" type="xs:string" minOccurs="0" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="CallEventDataFile"> <xs:complexType> <xs:sequence> <xs:element name="extensions" type="xs:string" minOccurs="0" /> <xs:element name="headerRecord" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="productionDateTime" type="xs:string" minOccurs="0" /> <xs:element name="recordingEntity" type="xs:string" minOccurs="0" /> <xs:element name="extensions" type="xs:string" minOccurs="0" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="callEventRecords" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="mtSMSRecord" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="recordType" type="xs:string" minOccurs="0" /> <xs:element name="serviceCentre" type="xs:string" minOccurs="0" /> <xs:element name="servedIMSI" type="xs:string" minOccurs="0" /> <xs:element name="servedIMEI" type="xs:string" minOccurs="0" /> <xs:element name="servedMSISDN" type="xs:string" minOccurs="0" /> <xs:element name="msClassmark" type="xs:string" minOccurs="0" /> <xs:element name="recordingEntity" type="xs:string" minOccurs="0" /> <xs:element name="deliveryTime" type="xs:string" minOccurs="0" /> <xs:element name="orgRNCorBSCId" type="xs:string" minOccurs="0" /> <xs:element name="orgMSCId" type="xs:string" minOccurs="0" /> <xs:element name="globalAreaID" type="xs:string" minOccurs="0" /> <xs:element name="subscriberCategory" type="xs:string" minOccurs="0" /> <xs:element name="firstmccmnc" type="xs:string" minOccurs="0" /> <xs:element name="smsUserDataType" type="xs:string" minOccurs="0" /> <xs:element name="origination" type="xs:string" minOccurs="0" /> <xs:element name="callReference" type="xs:string" minOccurs="0" /> <xs:element ref="location" minOccurs="0" maxOccurs="unbounded" /> <xs:element ref="systemType" minOccurs="0" maxOccurs="unbounded" /> <xs:element ref="basicService" minOccurs="0" maxOccurs="unbounded" /> <xs:element ref="additionalChgInfo" minOccurs="0" maxOccurs="unbounded" /> <xs:element ref="chargedParty" minOccurs="0" maxOccurs="unbounded" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="moSMSRecord" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="recordType" type="xs:string" minOccurs="0" /> <xs:element name="servedIMSI" type="xs:string" minOccurs="0" /> <xs:element name="servedIMEI" type="xs:string" minOccurs="0" /> <xs:element name="servedMSISDN" type="xs:string" minOccurs="0" /> <xs:element name="msClassmark" type="xs:string" minOccurs="0" /> <xs:element name="serviceCentre" type="xs:string" minOccurs="0" /> <xs:element name="recordingEntity" type="xs:string" minOccurs="0" /> <xs:element name="messageReference" type="xs:string" minOccurs="0" /> <xs:element name="originationTime" type="xs:string" minOccurs="0" /> <xs:element name="destinationNumber" type="xs:string" minOccurs="0" /> <xs:element name="orgRNCorBSCId" type="xs:string" minOccurs="0" /> <xs:element name="orgMSCId" type="xs:string" minOccurs="0" /> <xs:element name="globalAreaID" type="xs:string" minOccurs="0" /> <xs:element name="subscriberCategory" type="xs:string" minOccurs="0" /> <xs:element name="firstmccmnc" type="xs:string" minOccurs="0" /> <xs:element name="smsUserDataType" type="xs:string" minOccurs="0" /> <xs:element name="callReference" type="xs:string" minOccurs="0" /> <xs:element ref="location" minOccurs="0" maxOccurs="unbounded" /> <xs:element ref="systemType" minOccurs="0" maxOccurs="unbounded" /> <xs:element ref="basicService" minOccurs="0" maxOccurs="unbounded" /> <xs:element ref="additionalChgInfo" minOccurs="0" maxOccurs="unbounded" /> <xs:element ref="chargedParty" minOccurs="0" maxOccurs="unbounded" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="ssActionRecord" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="recordType" type="xs:string" minOccurs="0" /> <xs:element name="servedIMSI" type="xs:string" minOccurs="0" /> <xs:element name="servedIMEI" type="xs:string" minOccurs="0" /> <xs:element name="servedMSISDN" type="xs:string" minOccurs="0" /> <xs:element name="msClassmark" type="xs:string" minOccurs="0" /> <xs:element name="recordingEntity" type="xs:string" minOccurs="0" /> <xs:element name="supplService" type="xs:string" minOccurs="0" /> <xs:element name="ssActionTime" type="xs:string" minOccurs="0" /> <xs:element name="callReference" type="xs:string" minOccurs="0" /> <xs:element name="ussdCodingScheme" type="xs:string" minOccurs="0" /> <xs:element name="ussdRequestCounter" type="xs:string" minOccurs="0" /> <xs:element name="orgRNCorBSCId" type="xs:string" minOccurs="0" /> <xs:element name="orgMSCId" type="xs:string" minOccurs="0" /> <xs:element name="globalAreaID" type="xs:string" minOccurs="0" /> <xs:element name="subscriberCategory" type="xs:string" minOccurs="0" /> <xs:element name="firstmccmnc" type="xs:string" minOccurs="0" /> <xs:element ref="location" minOccurs="0" maxOccurs="unbounded" /> <xs:element name="ssAction" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="ussdInvocation" type="xs:string" minOccurs="0" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="ssParameters" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="unstructuredData" type="xs:string" minOccurs="0" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element ref="systemType" minOccurs="0" maxOccurs="unbounded" /> <xs:element name="ussdString" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="UssdString" type="xs:string" minOccurs="0" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element ref="additionalChgInfo" minOccurs="0" maxOccurs="unbounded" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="moCallRecord" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="recordType" type="xs:string" minOccurs="0" /> <xs:element name="servedIMSI" type="xs:string" minOccurs="0" /> <xs:element name="servedIMEI" type="xs:string" minOccurs="0" /> <xs:element name="servedMSISDN" type="xs:string" minOccurs="0" /> <xs:element name="callingNumber" type="xs:string" minOccurs="0" /> <xs:element name="calledNumber" type="xs:string" minOccurs="0" /> <xs:element name="roamingNumber" type="xs:string" minOccurs="0" /> <xs:element name="recordingEntity" type="xs:string" minOccurs="0" /> <xs:element name="msClassmark" type="xs:string" minOccurs="0" /> <xs:element name="answerTime" type="xs:string" minOccurs="0" /> <xs:element name="releaseTime" type="xs:string" minOccurs="0" /> <xs:element name="callDuration" type="xs:string" minOccurs="0" /> <xs:element name="causeForTerm" type="xs:string" minOccurs="0" /> <xs:element name="callReference" type="xs:string" minOccurs="0" /> <xs:element name="gsm-SCFAddress" type="xs:string" minOccurs="0" /> <xs:element name="serviceKey" type="xs:string" minOccurs="0" /> <xs:element name="networkCallReference" type="xs:string" minOccurs="0" /> <xs:element name="mSCAddress" type="xs:string" minOccurs="0" /> <xs:element name="speechVersionSupported" type="xs:string" minOccurs="0" /> <xs:element name="speechVersionUsed" type="xs:string" minOccurs="0" /> <xs:element name="numberOfDPEncountered" type="xs:string" minOccurs="0" /> <xs:element name="levelOfCAMELService" type="xs:string" minOccurs="0" /> <xs:element name="freeFormatData" type="xs:string" minOccurs="0" /> <xs:element name="classmark3" type="xs:string" minOccurs="0" /> <xs:element name="mscOutgoingCircuit" type="xs:string" minOccurs="0" /> <xs:element name="orgRNCorBSCId" type="xs:string" minOccurs="0" /> <xs:element name="orgMSCId" type="xs:string" minOccurs="0" /> <xs:element name="calledIMSI" type="xs:string" minOccurs="0" /> <xs:element name="globalAreaID" type="xs:string" minOccurs="0" /> <xs:element name="subscriberCategory" type="xs:string" minOccurs="0" /> <xs:element name="firstmccmnc" type="xs:string" minOccurs="0" /> <xs:element name="lastmccmnc" type="xs:string" minOccurs="0" /> <xs:element ref="mscIncomingROUTE" minOccurs="0" maxOccurs="unbounded" /> <xs:element ref="mscOutgoingROUTE" minOccurs="0" maxOccurs="unbounded" /> <xs:element ref="location" minOccurs="0" maxOccurs="unbounded" /> <xs:element ref="basicService" minOccurs="0" maxOccurs="unbounded" /> <xs:element ref="radioChanRequested" minOccurs="0" maxOccurs="unbounded" /> <xs:element ref="radioChanUsed" minOccurs="0" maxOccurs="unbounded" /> <xs:element ref="diagnostics" minOccurs="0" maxOccurs="unbounded" /> <xs:element ref="additionalChgInfo" minOccurs="0" maxOccurs="unbounded" /> <xs:element ref="systemType" minOccurs="0" maxOccurs="unbounded" /> <xs:element ref="chargedParty" minOccurs="0" maxOccurs="unbounded" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="mtCallRecord" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="recordType" type="xs:string" minOccurs="0" /> <xs:element name="servedIMSI" type="xs:string" minOccurs="0" /> <xs:element name="servedIMEI" type="xs:string" minOccurs="0" /> <xs:element name="servedMSISDN" type="xs:string" minOccurs="0" /> <xs:element name="callingNumber" type="xs:string" minOccurs="0" /> <xs:element name="recordingEntity" type="xs:string" minOccurs="0" /> <xs:element name="msClassmark" type="xs:string" minOccurs="0" /> <xs:element name="answerTime" type="xs:string" minOccurs="0" /> <xs:element name="releaseTime" type="xs:string" minOccurs="0" /> <xs:element name="callDuration" type="xs:string" minOccurs="0" /> <xs:element name="causeForTerm" type="xs:string" minOccurs="0" /> <xs:element name="callReference" type="xs:string" minOccurs="0" /> <xs:element name="networkCallReference" type="xs:string" minOccurs="0" /> <xs:element name="mSCAddress" type="xs:string" minOccurs="0" /> <xs:element name="speechVersionSupported" type="xs:string" minOccurs="0" /> <xs:element name="speechVersionUsed" type="xs:string" minOccurs="0" /> <xs:element name="classmark3" type="xs:string" minOccurs="0" /> <xs:element name="roamingNumber" type="xs:string" minOccurs="0" /> <xs:element name="mscIncomingCircuit" type="xs:string" minOccurs="0" /> <xs:element name="orgRNCorBSCId" type="xs:string" minOccurs="0" /> <xs:element name="orgMSCId" type="xs:string" minOccurs="0" /> <xs:element name="globalAreaID" type="xs:string" minOccurs="0" /> <xs:element name="subscriberCategory" type="xs:string" minOccurs="0" /> <xs:element name="firstmccmnc" type="xs:string" minOccurs="0" /> <xs:element name="lastmccmnc" type="xs:string" minOccurs="0" /> <xs:element ref="mscIncomingROUTE" minOccurs="0" maxOccurs="unbounded" /> <xs:element ref="mscOutgoingROUTE" minOccurs="0" maxOccurs="unbounded" /> <xs:element ref="location" minOccurs="0" maxOccurs="unbounded" /> <xs:element ref="basicService" minOccurs="0" maxOccurs="unbounded" /> <xs:element name="supplServicesUsed" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="SuppServiceUsedid" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="ssCode" type="xs:string" minOccurs="0" /> <xs:element name="ssTime" type="xs:string" minOccurs="0" /> </xs:sequence>

    Read the article

  • jQuery validator not working in unit testing

    - by Dbugger
    I have this small HTML file: <html> <head></head> <body> <form id='MyForm'> <input type='text' required /> <input type='submit' /> </form> <script src="/js/jquery-1.9.0.js"></script> <script src="/js/jquery.validate.js"></script> <script> var validator = $("#MyForm").validate(); alert(validator.form()); </script> </body> </html> This alerts me with "false", which is the expected behaviour. The problem comes when I go to unit testing, with js-test-driver: TestCase("MyTests", { setUp: function() { this.myform = "<form id='MyForm'><input type='text' required /><input type='submit' /></form>"; this.validator = $(this.myform).validate(); jstestdriver.console.log("Does the form validate? " + this.validator.form()); }, test_empty: function() { }, }); This code returns me the string Does the form validate? true This is a simplified version of my project of course, but the point is that I dont seem to be able to unit test the validation module im developing, since the jQuery validate plugin doesnt seem to work. What am I missing?

    Read the article

  • SQL University: Database testing and refactoring tools and examples

    - by Mladen Prajdic
    This is a post for a great idea called SQL University started by Jorge Segarra also famously known as SqlChicken on Twitter. It’s a collection of blog posts on different database related topics contributed by several smart people all over the world. So this week is mine and we’ll be talking about database testing and refactoring. In 3 posts we’ll cover: SQLU part 1 - What and why of database testing SQLU part 2 - What and why of database refactoring SQLU part 3 - Database testing and refactoring tools and examples This is the third and last part of the series and in it we’ll take a look at tools we can test and refactor with plus some an example of the both. Tools of the trade First a few thoughts about how to go about testing a database. I'm firmily against any testing tools that go into the database itself or need an extra database. Unit tests for the database and applications using the database should all be in one place using the same technology. By using database specific frameworks we fragment our tests into many places and increase test system complexity. Let’s take a look at some testing tools. 1. NUnit, xUnit, MbUnit All three are .Net testing frameworks meant to unit test .Net application. But we can test databases with them just fine. I use NUnit because I’ve always used it for work and personal projects. One day this might change. So the thing to remember is to be flexible if something better comes along. All three are quite similar and you should be able to switch between them without much problem. 2. TSQLUnit As much as this framework is helpful for the non-C# savvy folks I don’t like it for the reason I stated above. It lives in the database and thus fragments the testing infrastructure. Also it appears that it’s not being actively developed anymore. 3. DbFit I haven’t had the pleasure of trying this tool just yet but it’s on my to-do list. From what I’ve read and heard Gojko Adzic (@gojkoadzic on Twitter) has done a remarkable job with it. 4. Redgate SQL Refactor and Apex SQL Refactor Neither of these refactoring tools are free, however if you have hardcore refactoring planned they are worth while looking into. I’ve only used the Red Gate’s Refactor and was quite impressed with it. 5. Reverting the database state I’ve talked before about ways to revert a database to pre-test state after unit testing. This still holds and I haven’t changed my mind. Also make sure to read the comments as they are quite informative. I especially like the idea of setting up and tearing down the schema for each test group with NHibernate. Testing and refactoring example We’ll take a look at the simple schema and data test for a view and refactoring the SELECT * in that view. We’ll use a single table PhoneNumbers with ID and Phone columns. Then we’ll refactor the Phone column into 3 columns Prefix, Number and Suffix. Lastly we’ll remove the original Phone column. Then we’ll check how the view behaves with tests in NUnit. The comments in code explain the problem so be sure to read them. I’m assuming you know NUnit and C#. T-SQL Code C# test code USE tempdbGOCREATE TABLE PhoneNumbers( ID INT IDENTITY(1,1), Phone VARCHAR(20))GOINSERT INTO PhoneNumbers(Phone)SELECT '111 222333 444' UNION ALLSELECT '555 666777 888'GO-- notice we don't have WITH SCHEMABINDINGCREATE VIEW vPhoneNumbersAS SELECT * FROM PhoneNumbersGO-- Let's take a look at what the view returns -- If we add a new columns and rows both tests will failSELECT *FROM vPhoneNumbers GO -- DoesViewReturnCorrectColumns test will SUCCEED -- DoesViewReturnCorrectData test will SUCCEED -- refactor to split Phone column into 3 partsALTER TABLE PhoneNumbers ADD Prefix VARCHAR(3)ALTER TABLE PhoneNumbers ADD Number VARCHAR(6)ALTER TABLE PhoneNumbers ADD Suffix VARCHAR(3)GO-- update the new columnsUPDATE PhoneNumbers SET Prefix = LEFT(Phone, 3), Number = SUBSTRING(Phone, 5, 6), Suffix = RIGHT(Phone, 3)GO-- remove the old columnALTER TABLE PhoneNumbers DROP COLUMN PhoneGO-- This returns unexpected results!-- it returns 2 columns ID and Phone even though -- we don't have a Phone column anymore.-- Notice that the data is from the Prefix column-- This is a danger of SELECT *SELECT *FROM vPhoneNumbers -- DoesViewReturnCorrectColumns test will SUCCEED -- DoesViewReturnCorrectData test will FAIL -- for a fix we have to call sp_refreshview -- to refresh the view definitionEXEC sp_refreshview 'vPhoneNumbers'-- after the refresh the view returns 4 columns-- this breaks the input/output behavior of the database-- which refactoring MUST NOT doSELECT *FROM vPhoneNumbers -- DoesViewReturnCorrectColumns test will FAIL -- DoesViewReturnCorrectData test will FAIL -- to fix the input/output behavior change problem -- we have to concat the 3 columns into one named PhoneALTER VIEW vPhoneNumbersASSELECT ID, Prefix + ' ' + Number + ' ' + Suffix AS PhoneFROM PhoneNumbersGO-- now it works as expectedSELECT *FROM vPhoneNumbers -- DoesViewReturnCorrectColumns test will SUCCEED -- DoesViewReturnCorrectData test will SUCCEED -- clean upDROP VIEW vPhoneNumbersDROP TABLE PhoneNumbers [Test]public void DoesViewReturnCoorectColumns(){ // conn is a valid SqlConnection to the server's tempdb // note the SET FMTONLY ON with which we return only schema and no data using (SqlCommand cmd = new SqlCommand("SET FMTONLY ON; SELECT * FROM vPhoneNumbers", conn)) { DataTable dt = new DataTable(); dt.Load(cmd.ExecuteReader(CommandBehavior.CloseConnection)); // test returned schema: number of columns, column names and data types Assert.AreEqual(dt.Columns.Count, 2); Assert.AreEqual(dt.Columns[0].Caption, "ID"); Assert.AreEqual(dt.Columns[0].DataType, typeof(int)); Assert.AreEqual(dt.Columns[1].Caption, "Phone"); Assert.AreEqual(dt.Columns[1].DataType, typeof(string)); }} [Test]public void DoesViewReturnCorrectData(){ // conn is a valid SqlConnection to the server's tempdb using (SqlCommand cmd = new SqlCommand("SELECT * FROM vPhoneNumbers", conn)) { DataTable dt = new DataTable(); dt.Load(cmd.ExecuteReader(CommandBehavior.CloseConnection)); // test returned data: number of rows and their values Assert.AreEqual(dt.Rows.Count, 2); Assert.AreEqual(dt.Rows[0]["ID"], 1); Assert.AreEqual(dt.Rows[0]["Phone"], "111 222333 444"); Assert.AreEqual(dt.Rows[1]["ID"], 2); Assert.AreEqual(dt.Rows[1]["Phone"], "555 666777 888"); }}   With this simple example we’ve seen how a very simple schema can cause a lot of problems in the whole application/database system if it doesn’t have tests. Imagine what would happen if some outside process would depend on that view. It would get wrong data and propagate it silently throughout the system. And that is not good. So have tests at least for the crucial parts of your systems. And with that we conclude the Database Testing and Refactoring week at SQL University. Hope you learned something new and enjoy the learning weeks to come. Have fun!

    Read the article

  • What type of code is suitable for unit testing?

    - by RPK
    In Test Driven Development, what type of code is testable? I am using a Micro-ORM (PetaPoco) and I have several methods that interact with the database like: AddCustomer UpdateRecord etc. I want to know how to write a test for these methods. I searched YouTube for videos on writing a test for DAL, but I didn't find any. I want to know which method or class is testable and how to write a test before writing the code itself.

    Read the article

  • Dynamically specify the type in C#

    - by Lirik
    I'm creating a custom DataSet and I'm under some constrains: I want the user to specify the type of the data which they want to store. I want to reduce type-casting because I think it will be VERY expensive. I will use the data VERY frequently in my application. I don't know what type of data will be stored in the DataSet, so my initial idea was to make it a List of objects, but I suspect that the frequent use of the data and the need to type-cast will be very expensive. The basic idea is this: class DataSet : IDataSet { private Dictionary<string, List<Object>> _data; /// <summary> /// Constructs the data set given the user-specified labels. /// </summary> /// <param name="labels"> /// The labels of each column in the data set. /// </param> public DataSet(List<string> labels) { _data = new Dictionary<string, List<object>>(); foreach (string label in labels) { _data.Add(label, new List<object>()); } } #region IDataSet Members public List<string> DataLabels { get { return _data.Keys.ToList(); } } public int Count { get { _data[_data.Keys[0]].Count; } } public List<object> GetValues(string label) { return _data[label]; } public object GetValue(string label, int index) { return _data[label][index]; } public void InsertValue(string label, object value) { _data[label].Insert(0, value); } public void AddValue(string label, object value) { _data[label].Add(value); } #endregion } A concrete example where the DataSet will be used is to store data obtained from a CSV file where the first column contains the labels. When the data is being loaded from the CSV file I'd like to specify the type rather than casting to object. The data could contain columns such as dates, numbers, strings, etc. Here is what it could look like: "Date","Song","Rating","AvgRating","User" "02/03/2010","Code Monkey",4.6,4.1,"joe" "05/27/2009","Code Monkey",1.2,4.5,"jill" The data will be used in a Machine Learning/Artificial Intelligence algorithm, so it is essential that I make the reading of data very fast. I want to eliminate type-casting as much as possible, since I can't afford to cast from 'object' to whatever data type is needed on every read. I've seen applications that allow the user to pick the specific data type for each item in the csv file, so I'm trying to make a similar solution where a different type can be specified for each column. I want to create a generic solution so I don't have to return a List<object> but a List<DateTime> (if it's a DateTime column) or List<double> (if it's a column of doubles). Is there any way that this can be achieved? Perhaps my approach is wrong, is there a better approach to this problem?

    Read the article

< Previous Page | 15 16 17 18 19 20 21 22 23 24 25 26  | Next Page >