2015-01-27 2 views
1

Я пытаюсь модульного тестирования карты с помощью следующего кода,Biztalk Тестирование карт Unit Исключение

protected string Map(TransformBase map, string xml) 
     { 
      StringWriter str = new StringWriter(); 
      XmlTextWriter writer = new XmlTextWriter(str); 

      map.Transform.Transform(new XPathDocument(new StringReader(xml)), new XsltArgumentList(), writer); 

      return str.ToString(); 
     } 

И это вызывается следующим образом,

[Test] 
     public void Map_Test() 
     { 
      var result = Map(new TestMap(),File.ReadAllText(_dataDir.GetFiles("TestRequest.xml")[0].FullName)); 
      Assert.IsTrue(result.Contains("4323432")); 
     } 

Это отлично работает для большинства карт, однако если я использую функцию из внешней сборки, это не работает и не работает с ошибкой

Result Message: System.Xml.Xsl.XslTransformException : Cannot find a script or an extension object associated with namespace 'http://schemas.microsoft.com/BizTalk/2003/ScriptNS0'. 

Result StackTrace: 
at System.Xml.Xsl.Runtime.XmlQueryContext.InvokeXsltLateBoundFunction(String name, String namespaceUri, IList`1[] args) 
at <xsl:template match="/workOrderRequest">(XmlQueryRuntime {urn:schemas-microsoft-com:xslt-debug}runtime, XPathNavigator {urn:schemas-microsoft-com:xslt-debug}current) 
at <xsl:template match="/">(XmlQueryRuntime {urn:schemas-microsoft-com:xslt-debug}runtime, XPathNavigator {urn:schemas-microsoft-com:xslt-debug}current) 
at Root(XmlQueryRuntime {urn:schemas-microsoft-com:xslt-debug}runtime) 
at Execute(XmlQueryRuntime {urn:schemas-microsoft-com:xslt-debug}runtime) 
at System.Xml.Xsl.XmlILCommand.Execute(Object defaultDocument, XmlResolver dataSources, XsltArgumentList argumentList, XmlSequenceWriter results) 
at System.Xml.Xsl.XmlILCommand.Execute(Object defaultDocument, XmlResolver dataSources, XsltArgumentList argumentList, XmlWriter writer) 
at System.Xml.Xsl.XslCompiledTransform.Transform(XmlReader input, XsltArgumentList arguments, XmlWriter results) 

ответ

3

Наконец, мне удалось сделать это с помощью следующего кода (BT 2013 R2), Метод Map сделать фактическое отображение и возвращает результат XML,

Параметры,

map -> new object of the map type instance 
xml -> source xml content 
extObjects -> *_extxml.xml file content generated when executing validate instance on the map 

код

 protected string Map(TransformBase map, string xml, string extObjects = null) 
     { 
      string result = string.Empty; 
      XslCompiledTransform transform = new XslCompiledTransform(); 
      XsltSettings setting = new XsltSettings(false, true); 
      transform.Load(XmlReader.Create(new StringReader(map.XmlContent)), setting, new XmlUrlResolver()); 

      using (StringWriter writer = new StringWriter()) 
      { 
       transform.Transform(XmlReader.Create(new StringReader(xml)), 
       GetExtensionObjects(extObjects), XmlWriter.Create(writer)); 
       result = writer.ToString(); 
      } 

      return result; 
     } 

     protected XsltArgumentList GetExtensionObjects(string extObjects) 
     { 
      XsltArgumentList arguments = new XsltArgumentList(); 
      if (extObjects == null) 
       return arguments; 

      XDocument extObjectsXDoc = XDocument.Parse(extObjects); 
      foreach (XElement node in extObjectsXDoc.Descendants("ExtensionObject")) 
      { 
       string assembly_qualified_name = String.Format("{0}, {1}", node.Attribute("ClassName").Value, node.Attribute("AssemblyName").Value); 
       object extension_object = Activator.CreateInstance(Type.GetType(assembly_qualified_name)); 
       arguments.AddExtensionObject(node.Attribute("Namespace").Value, extension_object); 
      } 
      return arguments; 
     } 

Пример использования

[Test] 
    public void Map_Test() 
    { 
     var result = Map(new A_To_B() 
      , File.ReadAllText("A.xml") 
      , File.ReadAllText("A_To_B_extxml.xml")); 
     Assert.IsNotNullOrEmpty(result); 
    } 
3

Невозможно d ebug custom xslt со ссылкой на внешнюю сборку.

Проверить this нить для получения дополнительной информации

Edit:this также может заинтересовать вас.

Смежные вопросы