... in fact if you're building, you may be better off just using a stringbuilder and generating the delimited string. If the UniDynArray is wrapping a string that might explain why it seems slow. (.net strings are immutable so changing strings is a bad idea).
on the server the string manipulations are highly optimised using various hidden pointers and hints. Brian Sent from my iPad On 14 Aug 2012, at 21:25, Brian Leach <[email protected]> wrote: > Do you need to send an actual UniDynArray or the underlying data in a dynamic > array format? IIIRC the UniSubroutine arguments are overloaded to use > strings: and a dynamic array (encapsulated in a UniDynArray) is actually a > delimited string. Fields separated by \xFe, values by \xFD, text encoding is > 8 bit ansi so get the TextEncoding from page 1252. > > Now I dont know what the UniDynArray does internally to manage data but I > have found it slow, and often better to go to the underlying string and parse > or manipulate it directly e.g. using a List<string>.AddRange( > myArray.StringValue.Split('\xFd')); > > AFAIK the only reason the UniDynArray is constructed from the UniSession is > because it needs to get any NLS mappings from the server (anyone know > better?) and certainly the older COM implementation of UniObjects did not > need a session to create a dynamic array, so you could probably just simulate > that and ignore the parenting UniSession. > > > oh and be careful about insert, you probably need replace in most cases. that > will replace the content of an existing or non-existing element. > > B > Sent from my iPad > > On 14 Aug 2012, at 20:49, "Ravindranath Wickramanayake" <[email protected]> > wrote: > >> Hmm my Business logic sends data to Data Layer then data layer talks to >> pick server by using UniObject.NET dll. What I'm trying to unit test is >> this DataLayer Calls to pick to check whether it converts complex >> objects to UniDynArrays correctly. >> >> So How do you abstract UniSession out? Sproc coming from pick side >> (which I have no control over) require me to send UniDynArray. >> >> What I want is to send user data to a UniDynArray. I have already >> interfaced UniDynArray insert methods but I can't see how I could return >> a UniDynArray without a UniSession. Is there a way you could fake >> UniSession for unit testing purposes? >> >> -----Original Message----- >> From: [email protected] >> [mailto:[email protected]] On Behalf Of Brian Leach >> Sent: Tuesday, August 14, 2012 4:56 AM >> To: 'U2 Users List' >> Subject: Re: [U2] Mocking UniSession in .NET >> >> T >> >> I think we're actually talking the same thing: a separation between the >> business logic and the client. >> Mocking the business logic calls so they don't touch the server, and >> separately unit testing the server routines so you know they will work >> when they will be hit. >> >> And I'm a believer in unit tests, or at least the discipline they >> enforce - learned the hard way - and as a platform for integration >> testing. Without automated testing I haven't got the resources to do a >> full integration test for every release. Though not necessarily going >> as far as TDD yet. >> >> Brian >> >> -----Original Message----- >> From: [email protected] >> [mailto:[email protected]] On Behalf Of Tony Gravagno >> Sent: 14 August 2012 01:29 >> To: [email protected] >> Subject: Re: [U2] Mocking UniSession in .NET >> >>> Brian Leach >>> would it be better to construct a higher level wrapper for your >> business >>> functions and mock those? the UO libraries are quite low level: its >> a bit >>> like mocking ado.net rather than your db calls. >> >>> From: Ravindranath >>> Thanks for the reply. I am trying to do higher level wrappers to >> hide >>> those UniObject stuff but the problem is in order to to get >> UniDynArray it >>> has to have UniSession. [snip] >> >> >> Brian, I was going to suggest the same thing. But this is one of the >> differences between unit testing an application and mocking, which will >> allow a unit test to run completely in test mode without actually >> calling to the server within the application code. Ravi could abstract >> his code out for the test but that very process could be considered an >> invalidation of the test. >> >> Despite the latest craze around unit testing and the entire industry >> that it's spawned, I still find applications I use to be as crappy as >> they've always been, so I'm not as enamored with unit tests or mocking >> as many others. When working on a GUI project I try to get the BASIC app >> developers to handle everything there while I intentionally remain >> ignorant of their inner processes. Once my clients get the hang of this >> they really enjoy the process - the BASIC developers regain their sense >> of self-confidence as they realize that a GUI doesn't threaten their >> jobs. We interface through well-defined BASIC calls. It's here that we >> can do a BASIC mockup of the input to their BASIC code. If that works, >> and I've done my job, the GUI will work when linked to the back-end. >> Similarly, and (Zzz...) here's the point, my GUI-side tests don't >> connect into the DBMS, so I don't need to mock that part. I keep that >> interface lightweight, use the same component for almost all DBMS >> activity, and don't need the overhead of unit tests or mocking for every >> new application. Ravi, that might be of some help to you. >> >> Good luck, >> T >> >> >> _______________________________________________ >> U2-Users mailing list >> [email protected] >> http://listserver.u2ug.org/mailman/listinfo/u2-users >> >> >> _______________________________________________ >> U2-Users mailing list >> [email protected] >> http://listserver.u2ug.org/mailman/listinfo/u2-users >> _______________________________________________ >> U2-Users mailing list >> [email protected] >> http://listserver.u2ug.org/mailman/listinfo/u2-users > _______________________________________________ > U2-Users mailing list > [email protected] > http://listserver.u2ug.org/mailman/listinfo/u2-users _______________________________________________ U2-Users mailing list [email protected] http://listserver.u2ug.org/mailman/listinfo/u2-users
