Skip to main content
 首页 » 编程设计

c#之相同的图像是不相等的。单元测试。 BitmapImage 属性。 C#

2024年06月03日37grandyang

图像属性:

public class SomeClass 
{ 
  public BitmapImage Image  
   { 
   get  
     { 
       BitmapImage src = new BitmapImage(); 
       try 
       {                         
         src.BeginInit(); 
         src.UriSource = new Uri(ReceivedNews.Image, UriKind.Absolute); 
         src.CacheOption = BitmapCacheOption.OnLoad; 
         src.EndInit();                         
        } 
       catch { } 
      return src; 
      } 
      private set { }  
    } 
} 

测试方法是:

[TestMethod] 
public void CanPropertyImage_StoresCorrectly() 
{             
   string address = "http://images.freeimages.com/images/previews/083/toy-car-red-1417351.jpg"; 
   var aSomeClass = new SomeClass(new News() { Image = address}); 
   BitmapImage src = new BitmapImage(); 
   try 
     { 
      src.BeginInit(); 
      src.UriSource = new Uri(address, UriKind.Absolute); 
      src.CacheOption = BitmapCacheOption.OnLoad; 
      src.EndInit(); 
     } 
  catch { } 
  Assert.AreEqual(src, aSomeClass.Image); 
} 

我在单元测试中发现了一个错误:

Assert.AreEqual 出错。预期:http://images.freeimages.com/images/previews/083/toy-car-red-1417351.jpg .事实上:http://images.freeimages.com/images/previews/083/toy-car-red-1417351.jpg .

我真的无法理解相同图像之间的区别在哪里?为什么测试不通过?

请您参考如下方法:

两个 BitmapImage 对象,即使是从相同的图像 Uri 创建的,也不会比较相等:

var imageUrl = "..."; 
var bi1 = new BitmapImage(new Uri(imageUrl)); 
var bi2 = new BitmapImage(new Uri(imageUrl)); 
 
Assert.AreEqual(b1, b2); // will fail 

但是,您可以比较它们的 UriSource 属性或它们的字符串表示形式:

Assert.AreEqual(b1.UriSource, b2.UriSource); // will succeed 
Assert.AreEqual(b1.ToString(), b2.ToString()); // will succeed