0

変数failureがあります。これには、passed、failure、またはerrorの3つの値があります。シリアル化中に実行したいのは、値に基づいて要素を作成することです。合格の場合、要素を無視したいと思います。失敗の場合、失敗要素が必要です。エラーの場合、エラー要素が必要です。これはどのように行うことができますか?

テストクラスには、m_stepsと呼ばれるステップのリストがあります。ステップには、合格、失敗、またはエラーを保持するm_failureという変数があります。m_stepsによって作成された要素を非要素(合格)、失敗、またはエラーにしたい。

[XmlRoot("testsuite")]
public class Suite
{
    [XmlAttribute("name")]
    public string m_name;

    [XmlElement("testcase")]
    public List<Test> m_tests;

    [XmlIgnore]
    public string m_timestamp;


public class Test
{
    [XmlAttribute("name")]
    public string m_name;

    [XmlElement("failure")] // want to be ignore, failure or error instead of just failure
    public List<Step> m_steps;

    [XmlAttribute("assertions")]
    public int m_assertions;
}


public class Step
{
    [XmlIgnore]
    public string m_failure; // holds passed, failure, or error

    [XmlTextAttribute]
    public string m_message;

    [XmlIgnore]
    public string m_image;

    [XmlAttribute("type")]
    public string m_type;
}

探している:

に:

<?xml version="1.0" encoding="UTF-8"?>
-<testsuite name=" SimpleCalculationsSuite" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
  -<testcase name="Add 3+4" assertions="1"></testcase>
  -<testcase name="Fail 3-4" assertions="1"> 
     <failure type="Text">The control text is not correct. Expected-7 Actual--1</failure> 
   </testcase> 
  -<testcase name="Error 3*4" assertions="1"> 
     <error type="Click">The * button was not found</error> 
 </testsuite>

から:

Suite: SimpleCalculationsSuite
Test:Add 3+4
Passed:Text:The control text, 7, is correct.
Test:Fail 3-4
Failed:Text:The control text is not correct. Expected-7 Actual--1
Test:Error 3*4
Error:Click: The * button was not found
4

3 に答える 3

0

エラーのリストも含めるようにTestを変更することになりました。これにより、XMLファイルに障害ノードとエラーノードの両方を含めることができました。また、これを可能にするために、プログラムの一部を変更する必要がありました。

于 2012-08-01T17:40:27.060 に答える
0

簡単な答え: http: //msdn.microsoft.com/en-us/library/system.xml.serialization.ixmlserializable.aspx

于 2012-08-01T16:00:48.557 に答える
0

私はあなたの例から同じクラスを使用しません、私は私自身の少しの例を与えます。

メソッドpublicboolShouldSerialize * Name *()を実装する必要があります。ここで、Nameは、シリアル化を制御する属性の名前です。

たとえば、私はこのクラスを持っています:

[Serializable]
public class SerializeExample
{
    public string ResultType { get; set; }

    public string Error { get; set; }

    public string Failure { get; set; }

    public List<string> Steps { get; set; }

    public bool ShouldSerializeError()
    {
        return "Error".Equals(ResultType);
    }

    public bool ShouldSerializeFailure()
    {
        return "Failure".Equals(ResultType);
    }

    public bool ShouldSerializeSteps()
    {
        return ShouldSerializeError() || ShouldSerializeFailure();
    }
}

このクラスインスタンスがある場合:

SerializeExample ex1 = new SerializeExample { ResultType = "Success" };

次に、このXMLのみがシリアル化されます。

<SerializeExample>
  <ResultType>Success</ResultType>
</SerializeExample>

この他のクラスを作成してシリアル化すると、次のようになります。

SerializeExample ex2 = new SerializeExample { ResultType = "Error", Error = "Invalid data from user", Steps = new List<string>() };

次に、このXMLが生成されます。

<SerializeExample>
  <ResultType>Error</ResultType>
  <Error>Invalid data from user</Error>
  <Steps />
</SerializeExample>
于 2012-08-01T17:01:23.723 に答える