Wir verwenden XUnit 2.1.0 von NuGet mit den zugehörigen Läufern, Konsole und Visual Studio wie dokumentiert here unter der Überschrift "Tests mit Visual Studio laufen" und Bezug auf Inhalte.CSLAs WCF Verwendung beim Ausführen von XUnit Tests in vs Test Explorer verursacht eine Identitätswechsel Ausnahme
Ich bin auch mit Visual Studio 2015 Enterprise Update 2. Das einzige, was veraltet vernünftig ist, ist CSLA, sind wir auf 4.0.1 (glaube ich 5 Jahre alt?)
Wenn wir laufen Bei Tests, bei denen ein DataPortal-Abruf erforderlich ist, wird der Test abgebrochen, sobald der DataPortal-Abrufversuch an den Server gesendet wird. WCF löst eine "System.ServiceModel.FaultException" mit der Meldung "Ungültiges Token für Identitätswechsel aus - es kann nicht dupliziert werden." Es ist wichtig zu beachten, dass keiner der Tests versucht, sich als ein anderer Benutzer auszugeben. Das Umfallen geschieht in jedem Test, der versucht, CSLA für einen DataPortal-Aufruf zu verwenden. Wir sind vor kurzem von xunit 1.x auf 2.x über nugget umgestiegen. Früher haben wir xunit vom xunit-Runner ausgeführt, als wir unsere Tests lokal getestet haben, aber das ist nun veraltet. Die Tests liefen absolut gut sowohl mit dem Gui als auch mit dem Console Runner für xunit 1.x. Jetzt müssen wir den Visual Studio Runner mit xunit 2.x verwenden, wir bekommen diese verrückte Ausnahme.
bearbeiten: Wenn Sie Xunit 2.x Konsole Runner von außerhalb des Visual Studio ausführen, sind die Tests auch gut auf 2.x, es ist die visuelle Studio-Seite der Dinge, die nicht funktioniert.
-Stack-Trace:
Server stack trace:
at System.ServiceModel.Channels.ServiceChannel.ThrowIfFaultUnderstood(Message reply, MessageFault fault, String action, MessageVersion version, FaultConverter faultConverter)
at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at Csla.Server.Hosts.IWcfPortal.Fetch(FetchRequest request)
at Csla.DataPortalClient.WcfProxy.Fetch(Type objectType, Object criteria, DataPortalContext context) in D:\Dev\Insight\Trunk\Source\Lib\CSLA .NET\4.0\Source\Csla\DataPortalClient\WcfProxy.cs:line 162
at Csla.DataPortal.Fetch(Type objectType, Object criteria) in D:\Dev\Insight\Trunk\Source\Lib\CSLA .NET\4.0\Source\Csla\DataPortal.cs:line 245
at Csla.DataPortal.Fetch[T](Object criteria) in D:\Dev\Insight\Trunk\Source\Lib\CSLA .NET\4.0\Source\Csla\DataPortal.cs:line 170
Auch das funktioniert gut, wenn wir die Tests von einem anderen Test-Runner, entweder die alte xunit Testläufer oder CruiseControl.Net zum Beispiel (Wir verwenden CC.Net für kontinuierliche Integration laufen und das führt die Tests in Ordnung)
Interessant, wir haben ~ 1200 Unit-Tests im Moment though.Adding ein Attribut für alle von ihnen wird anstrengend sein. Ist dies der einzige Weg, um es in Visual Studio zu arbeiten? Hinzufügen dieses Attributs zu allen unseren Tests? Gibt es keine Möglichkeit, Visual Studio davon abzuhalten, sich zu imitieren? – Skintkingle
Tut mir leid, ich bin mir nicht bewusst, wie der Benutzer, den der VS-Test-Runner benutzt, geändert werden kann. Wird für einen Ihrer Tests bereits ein BeforeAfterTestAttribute verwendet, das diesen Wert erweitern könnte? Könnte die Dinge ein bisschen schneller machen. – Grinden
Oder suchen und ersetzen: "[Fact]" -> "[Fakt, RequiresGenericPrincipal]"? – Grinden